前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Zotero+Python|批量获取并翻译英文文献摘要

Zotero+Python|批量获取并翻译英文文献摘要

作者头像
PyStaData
发布2022-02-25 10:00:42
3.7K2
发布2022-02-25 10:00:42
举报
文章被收录于专栏:PyStaDataPyStaData

提出问题

获取到合作者或者他人分享的一大批英文文献,怎么快速的获取摘要,并翻译成中文?

分析问题

  1. 文献入库:将文献导入进 Zotero,并获取元数据;
  2. Zotero 和 Python 联动:使用 pyzotero 调用 Zotero API,获取英文文献摘要;
  3. 百度翻译 API:Python 调用百度翻译 API 进行翻译。

操作细节:

a.关于用 Python 操作 Zotero ,可以阅读这篇文章:Python|用 Pyzotero 库操作 Zotero

b.关于调用百度翻译 API,可以阅读这篇文章:Python|论文降重助手

这两篇推文对操作步骤 2 和步骤 3 进行了详细说明。

实现过程

需要用到的包

代码语言:javascript
复制
from pyzotero import zotero
import pandas as pd
import requests
import random
import json
from hashlib import md5

百度翻译 API

代码语言:javascript
复制
# 百度翻译参数
appid = "2021..." #自己申请的 appid
appkey = "......" # 自己申请的 key

# 调用百度翻译 API
def make_md5(s, encoding='utf-8'):
    '''
    生成随机数和签名
    '''
    return md5(s.encode(encoding)).hexdigest()

def translate(query, from_lang, to_lang):
    '''
    调用百度翻译 API
    '''
    url = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
    salt = random.randint(1, 65536) #随机数
    sign = make_md5(appid + query + str(salt) + appkey)

    # 构造请求
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    payload = {'appid': appid,
               'q': query,
               'from': from_lang,
               'to': to_lang,
               'salt': salt,
               'sign': sign
              }
    r = requests.post(url, params=payload, headers=headers)
    text = r.json()
    result = text['trans_result'][0]['dst']
    return result

Zotero 获取摘要

代码语言:javascript
复制
# Zotero账户
library_id = '' # https://www.zotero.org/settings/keys
library_type = 'user' # 'user' or 'group'
api_key = '' #  not be accessible again after created.

zot = zotero.Zotero(library_id, library_type, api_key)
colls = zot.collections() # 所有集合名称

# 查找待分析的集合
for coll in colls:
    if coll['data']['name'] == 'Environment':
        print(coll)

pyz = zot.collection_items('9FLNCCHU') # 待分析集合的key
代码语言:javascript
复制
# 存储标题、摘要和作者
title = []
abstract = []
author = []
for p in pyz:
    if p['data']['itemType'] == "journalArticle":
        title.append(p['data']['title'])
        abstract.append(p['data']['abstractNote'])
        author.append(p['data']['creators'][0]['lastName'])
代码语言:javascript
复制
# 摘要翻译成中文
abstract_cn = []
for ab in abstract:
    if ab != "":
        abstract_cn.append(translate(ab,"en","zh"))
    else:
        abstract_cn.append("")
代码语言:javascript
复制
# 写入DataFrame
paper_info = {
    "title": title,
    "author": author,
    "abstract": abstract,
    "abstract_cn":abstract_cn
}
df = pd.DataFrame(paper_info)

# 导出为Excel
df.to_excel("Environment_References_Abstract_CN.xlsx", index=None)

最终,大功告成:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyStaData 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提出问题
  • 分析问题
  • 实现过程
    • 需要用到的包
      • 百度翻译 API
        • Zotero 获取摘要
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档