日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

解放双手|Python 自动搜索、翻译、存储文献标题摘要!

發(fā)布時(shí)間:2024/9/15 python 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解放双手|Python 自动搜索、翻译、存储文献标题摘要! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、需求描述

大家好,我是早起。

如果是科研、深度學(xué)習(xí)等需要經(jīng)常閱讀大量論文的工作,批量翻譯就能大大提高效率

本文將進(jìn)一步使用 Python 實(shí)現(xiàn)另一個(gè)在科研學(xué)術(shù)領(lǐng)域的辦公自動(dòng)化應(yīng)用。「結(jié)合爬蟲批量翻譯文獻(xiàn)題目和摘要,并存儲(chǔ)搜索和翻譯結(jié)果至 Excel中

完成效果如下,指定的外文文獻(xiàn)標(biāo)題、摘要都被批量翻譯后存儲(chǔ)在Excel中,我們可以大致瀏覽后有選擇性的挑選文章閱讀!

本文以ACM協(xié)會(huì)的文獻(xiàn)為例,搜索的關(guān)鍵詞是 “對(duì)抗生成網(wǎng)絡(luò)+眼底” ,即 “GAN+fundus”

二、邏輯梳理

本文需求可以看做三塊內(nèi)容:爬蟲+翻譯+存儲(chǔ) 在使用百度的通用翻譯 API 之前需要完成以下工作:

  • 使用百度賬號(hào)登錄百度翻譯開放平臺(tái)(http://api.fanyi.baidu.com)

  • 注冊(cè)成為開發(fā)者,獲得APPID;

  • 進(jìn)行開發(fā)者認(rèn)證(如僅需標(biāo)準(zhǔn)版可跳過(guò));

  • 開通通用翻譯API服務(wù):開通鏈接

  • 參考技術(shù)文檔和Demo編寫代碼

  • 完成后在個(gè)人頁(yè)面在即可看到 ID 和密鑰,這個(gè)很重要!

    關(guān)于如何使用Python爬取翻譯結(jié)果的細(xì)節(jié)本文就不再贅述!我已經(jīng)將通用翻譯 API 的 demo代碼寫好,已經(jīng)對(duì)輸出做簡(jiǎn)單修改,拿走就能用!

    import?requests import?random import?json from?hashlib?import?md5#?Set?your?own?appid/appkey. appid?=?'xxx' appkey?=?'xxx'#?For?list?of?language?codes,?please?refer?to?`https://api.fanyi.baidu.com/doc/21` from_lang?=?'en' to_lang?=??'zh'endpoint?=?'http://api.fanyi.baidu.com' path?=?'/api/trans/vip/translate' url?=?endpoint?+?pathquery?=?'Hello?World!?This?is?1st?paragraph.\nThis?is?2nd?paragraph.'#?Generate?salt?and?sign def?make_md5(s,?encoding='utf-8'):return?md5(s.encode(encoding)).hexdigest()salt?=?random.randint(32768,?65536) sign?=?make_md5(appid?+?query?+?str(salt)?+?appkey)#?Build?request headers?=?{'Content-Type':?'application/x-www-form-urlencoded'} payload?=?{'appid':?appid,?'q':?query,?'from':?from_lang,?'to':?to_lang,?'salt':?salt,?'sign':?sign}#?Send?request r?=?requests.post(url,?params=payload,?headers=headers) result?=?r.json()#?Show?response for?res?in?result['trans_result']:print(res['dst'])

    在本需求中可以考慮將上面的API重新包裝成函數(shù),將爬取的題目和摘要看做兩個(gè)文本輸入函數(shù)后,返回翻譯的結(jié)果:

    import?requests import?random import?json from?hashlib?import?md5def?make_md5(s,?encoding='utf-8'):return?md5(s.encode(encoding)).hexdigest()def?Baidu_translate(query):#?Set?your?own?appid/appkey.appid?=?'xxx'appkey?=?'xxx'from_lang?=?'en'to_lang?=?'zh'endpoint?=?'http://api.fanyi.baidu.com'path?=?'/api/trans/vip/translate'url?=?endpoint?+?pathtry:salt?=?random.randint(32768,?65536)sign?=?make_md5(appid?+?query?+?str(salt)?+?appkey)#?Build?requestheaders_new?=?{'Content-Type':?'application/x-www-form-urlencoded'}payload?=?{'appid':?appid,?'q':?query,?'from':?from_lang,?'to':?to_lang,?'salt':?salt,?'sign':?sign}#?Send?requestr?=?requests.post(url,?params=payload,?headers=headers_new)result?=?r.json()['trans_result'][0]['dst']return?resultexcept:return?'翻譯出錯(cuò)'

    函數(shù)中用 try 捕獲錯(cuò)誤避免中途因?yàn)樘峤坏奈谋緸榭?#xff0c;而導(dǎo)致的報(bào)錯(cuò)終止程序

    存儲(chǔ)部分,通過(guò) openpyxl 或者 xlwings 存儲(chǔ)到 Excel 中就可以

    爬蟲部分,兩個(gè)網(wǎng)站的邏輯非常類似,具體見下文

    三、代碼實(shí)現(xiàn)

    首先爬取ACM的摘要,在首頁(yè)搜索框中輸入:GAN+fundus 跳轉(zhuǎn)后可以發(fā)現(xiàn),URL包含了關(guān)鍵詞:

    那么后面的搜索就可以直接用URL拼接:

    keyword?=?'GAN+fundus' url_init?=?r'https://dl.acm.org/action/doSearch?AllField=' url?=url_init?+?keyword

    搜索結(jié)果非常多,本文爬取第一頁(yè)文章的摘要為例,后續(xù)讀者當(dāng)關(guān)鍵詞鎖定的文獻(xiàn)比較少或者想獲取全部文獻(xiàn),可以自行尋找URL翻頁(yè)邏輯

    同時(shí)我們發(fā)現(xiàn),摘要顯示不全,確認(rèn)源代碼和ajax動(dòng)態(tài)加載不包含完整摘要,因此可以考慮進(jìn)入各文獻(xiàn)的詳情頁(yè)獲取摘要:

    回到搜索結(jié)果頁(yè),對(duì)詳情頁(yè)分析可以發(fā)現(xiàn)每個(gè)文獻(xiàn)可獲取的href跟 dl.acm.org 拼接后即為詳情頁(yè)URL:

    接下來(lái)就可以利用Xpath獲取搜索頁(yè)第一頁(yè)全部文獻(xiàn)的 href 并拼接成新URL:

    import?requests from?lxml?import?htmlkeyword?=?'GAN+fundus' url_init?=?r'https://dl.acm.org/action/doSearch?AllField=' url?=url_init?+?keyword html_data?=?requests.get(url).text selector?=?html.fromstring(html_data) articles?=?selector.xpath('//*[@id="pb-page-content"]/div/main/div[1]/div/div[2]/div/ul/li') for?article?in?articles:url_new?=?'https://dl.acm.org'?+?article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]print(url_new)

    獲得新的URL之后,重新用Xpath解析新的網(wǎng)頁(yè)獲取題目和摘要:

    for?article?in?articles:url_new?=?'https://dl.acm.org'?+?article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]html_data_new?=?requests.get(url_new).textselector_new?=?html.fromstring(html_data_new)title?=?selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]abstract?=?selector_new.xpath('//div[@class="abstractSection?abstractInFull"]/p/text()')[0]print('Title:?'?+?title)print('Abstract:?'?+?abstract)print('-'?*?20)

    題目和摘要可以成功輸出,但現(xiàn)在還是英文形式。只需要將文本提交給上文中包裝好的翻譯函數(shù),輸出返回值就是中文翻譯形式了。注意免費(fèi)的API每秒只允許調(diào)用一次,可以考慮將題目和摘要組合成一個(gè)文本同時(shí)提交,或者中間休眠一秒:

    for?article?in?articles:url_new?=?'https://dl.acm.org'?+?article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]html_data_new?=?requests.get(url_new).textselector_new?=?html.fromstring(html_data_new)title?=?selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]abstract?=?selector_new.xpath('//div[@class="abstractSection?abstractInFull"]/p/text()')[0]title?=?'Title:?'?+?titletranslated_title?=?Baidu_translate(title)print(title)print(translated_title)time.sleep(1)abstract?=?'Abstract:?'?+?abstracttranslated_abstract?=?Baidu_translate(abstract)print(abstract)print(translated_abstract)time.sleep(1)print('-'?*?20)

    題目和摘要成功翻譯!接下來(lái)可以自定義對(duì)接意向的持久化存儲(chǔ)了,以openpyxl為例,首先在代碼的開頭用 openpyxl 創(chuàng)建 Excel 文件并寫入表頭:

    from?openpyxl?import?Workbookwb?=?Workbook() sheet?=?wb.active header?=?['序號(hào)',?'題目',?'題目(譯)',?'摘要',?'摘要(譯)'] sheet.append(header) path?=?'xxx'?#?希望保存文件的路徑

    用變量 num 標(biāo)記文章的順序,并在每篇文章解析和翻譯完后利用 sheet.append(list) 寫入 Excel,循環(huán)結(jié)束后保存文件即完成全部存儲(chǔ):

    num?=?0 keyword?=?'GAN+fundus' url_init?=?r'https://dl.acm.org/action/doSearch?AllField=' url?=url_init?+?keyword html_data?=?requests.get(url).text selector?=?html.fromstring(html_data) articles?=?selector.xpath('//*[@id="pb-page-content"]/div/main/div[1]/div/div[2]/div/ul/li')for?article?in?articles:num?+=?1url_new?=?'https://dl.acm.org'?+?article.xpath('div[2]/div[2]/div/h5/span/a/@href')[0]html_data_new?=?requests.get(url_new).textselector_new?=?html.fromstring(html_data_new)title?=?selector_new.xpath('//*[@id="pb-page-content"]/div/main/div[2]/article/div[1]/div[2]/div/div[2]/h1/text()')[0]abstract?=?selector_new.xpath('//div[@class="abstractSection?abstractInFull"]/p/text()')[0]title?=?'Title:?'?+?titletranslated_title?=?Baidu_translate(title)print(title)print(translated_title)time.sleep(1)abstract?=?'Abstract:?'?+?abstracttranslated_abstract?=?Baidu_translate(abstract)print(abstract)print(translated_abstract)time.sleep(1)print('-'?*?20)sheet.append([num,?title,?translated_title,?abstract,?translated_abstract])wb.save(path?+?r'\文獻(xiàn)輸出.xlsx')

    最終實(shí)現(xiàn)效果如下,可以看到指定的文章標(biāo)題、摘要都被翻譯提取出來(lái),我們可以大致瀏覽后有選擇的查閱文章。

    另外還有一個(gè)重要的計(jì)算機(jī)協(xié)會(huì),IEEE(https://ieeexplore.ieee.org/Xplore/home.jsp),網(wǎng)頁(yè)信息爬取邏輯和ACM非常類似,不再贅述

    小結(jié)

    綜合各種辦公自動(dòng)化技術(shù),我們可以實(shí)現(xiàn)各式各樣的辦公或科研需求,扎實(shí)的技術(shù)是最重要的前提。

    例如本文的需求,其實(shí)我們還可以通過(guò) openpyxl 或者 xlwings 存儲(chǔ)到 Excel 中,實(shí)際上還可以 python-docx 寫入 Word 中,甚至從文獻(xiàn)中獲取圖片,借助 python-pptx 寫入 PPT 中。

    推薦閱讀

    Pandas處理數(shù)據(jù)太慢,來(lái)試試Polars吧!

    懶人必備!只需一行代碼,就能導(dǎo)入所有的Python庫(kù)

    絕!關(guān)于pip的15個(gè)使用小技巧

    介紹10個(gè)常用的Python內(nèi)置函數(shù),99.99%的人都在用!

    可能是全網(wǎng)最完整的 Python 操作 Excel庫(kù)總結(jié)!

    總結(jié)

    以上是生活随笔為你收集整理的解放双手|Python 自动搜索、翻译、存储文献标题摘要!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。