Zotero翻译和影响因子导入到EndNote9

Zotero更新到了6.0,带来了一系列重大功能更新,比如:支持内置pdf阅读器了,iPad端和iphone正式上线,更加强大的笔记功能。
但是EndNote软件效率更高、性能更强,搜索分组功能更加强大,因此仍然无法脱离EndNote。
所以我思考着,通过Zotero的翻译功能,将文献标题、摘要翻译后,并且将条目文献对应的影响因子、JCR、中科院分区利用GreenFrog插件获取后,导出到EndNote中,再进行下一步分组查看,会效率更高。
以下是操作步骤:

1 使用的软件及插件

  1. Zotero、插件:Translate for zotero、GreenFrog、Better bibtex
  2. Python
  3. EndNote
  4. 从Pubmed保存的.nbib文件

2 在Zotero中翻译

将Pubmed保存的文献库导入到Zotero,利用Translate for zotero、GreenFrog两个插件,进行标题、摘要翻译及影响因子的获取,其数据都保存在Extra字段中。
以下是Extra字段参考:

titleTranslation: 基于染色质调节剂和乳头状肾细胞癌肿瘤微环境浸润特征的分子亚型鉴定。
abstractTranslation: 背景:乳头状肾细胞癌(pRCC)是肾细胞癌第二常见的组织学类型。局部pRCC的预后优于ccRCC,但pRCC转移后情况发生较大变化。染色质调节因子(CRs)在表观遗传调控中不可或缺,其在肿瘤中的异常表达导致肿瘤的发生和发展。然而,CR 在 pRCC 中的作用尚未研究。材料和方法:291 个样本来自 TCGA-KIPR 队列。利用无监督聚类分析将pRCC患者分为两个亚型。进行 Lasso Cox 回归分析以构建用于预测 OS 的 CRs_score 模型。通过TME细胞浸润分析、GO和KEGG分析以及药物敏感性分析确定不同分子亚型的独特特征。我们还进行了体外药敏实验,验证特征基因对舒尼替尼药敏的影响。结果:我们描述了 291 例 TCGA-KIRP 队列中 19 个预后相关 CR 基因的转录和遗传改变。我们确定了两种不同的分子亚型,它们在预后、临床病理特征和肿瘤免疫微环境(TME)方面具有显着差异。然后,通过lasso回归分析选择4个特征基因构建预测OS的CRs_score,并验证其对pRCC患者的预测能力。建立列线图以提高CRs_score的临床适用性。我们发现高CRs_score和低CRs_score之间的免疫细胞浸润比例存在显着差异。此外,CRs_score与化疗敏感性显着相关。最后,我们发现 SK-RC-39 细胞系在敲除特征基因 CDCA3、PDIA4 或 SUCNR1 后对舒尼替尼更加敏感。结论:我们对 pRCC 中 CRs 基因的综合分析表明,CRs 基因在 pRCC 的 TME、预后和耐药性中发挥潜在作用。这些发现可能为进一步研究CRs基因在pRCC中的调控作用奠定基础,并为评估预后和开发更有效的靶向治疗提供新方法。
JCR分区: Q2
中科院分区升级版: 医学3区
影响因子: 3.6
5年影响因子: 3.8
南农高质量: B

3 利用Better bibtex导出文献json

用Better bibtex导出文献条目的json文件,参数如下:

4 使用Python将Json文件转为标准RIS

利用Python将Json文件转为标准RIS,思路如下:

  1. 读取Json
  2. 获取每个条目的信息
  3. 将条目的信息转为标准RIS对应的信息
  4. 保存RIS

以上用Python实现,代码会将folderPath路径下的所有json转为RIS,并保存在folderPath中,代码如下:

#!/usr/bin/env python3
# 本项目是将zotero的better bibtex导出的json文件转换为RIS文件,导入到endnote中用, zotero6, better bibtex 6.7.103
其中影响因子在C1字段,中科院分区在C2字段
#%%
import os
import re
import json 
import glob

# https://en.wikipedia.org/wiki/RIS_(file_format)
item_type ={'journalArticle' : 'JOUR',
            'manuscript' : 'UNPB',
            'book'    : 'BOOK',
            'bookSection':'BOOK',
            'online'    : 'ELEC',
            'webpage'    : 'ELEC',
            'conferencePaper':'CONF',
            'report': 'RPRT',
            'document': "BLOG",
            "preprint": 'UNPB',
            'videoRecording': 'VIDEO',
            'thesis':"THES"
            }
keys = {'year'      : 'PY',
        'url'       : 'UR',
        'number'    : 'M1',
        'ISSN': 'SN',
        'ISBN': 'SN',
        'title'     : 'TI',
        'abstractNote': 'AB',
        'volume'    : 'VL',
        'DOI'       : 'DO',
        'issue':'IS',
        'publicationTitle'   : 'JO',
        "shortjournal":"J2",
        'start_page': 'SP',
        'end_page'  : 'EP',
        # "annotation": "TT",
        'translateTitle': 'TT',
        'IF_my':'C1',  
        'Qpart':'C2',
        'translateAbstract':'N1',
        'url':"UR",
        "date":"DA"
        }
#%%
# Path to the bibtex file
folderPath = r'E:\Downloads\NPClymph\Endnote库备份\test'
bibfiles = glob.glob(os.path.join(folderPath,"*.json"))
for bib_file in bibfiles:
    # bib_file = r'E:\Downloads\NPClymph\龚\龚ICI.json'
    # # Load the bibtex file
    # data = parse_file(bib_file)

    with open(bib_file, encoding='utf-8') as f:
        data = json.load(f)

    data=data['items']
    # entry = data[1]
    # Create a dictionary holding all the entries
    library = {}
    for entry in data:
        label = entry['citationKey']
        # print(label, entry)
        item = {}
        item['type'] = entry['itemType']
        authors = []
        for person in entry['creators']:
            try:
                first_name = person['firstName']
                last_name  = person['lastName']
                authors.append(', '.join([last_name, first_name]))
            except:
                authors.append(person['name'])
        item['authors'] = authors

        item['data'] = {}
        for key, content in entry.items():
            # print(key,content)
            if key == 'pages':
                pages = content.split('--')
                if len(pages) == 1:
                    pages = content.split('-')  
                elif len(pages) > 1:
                    item['data']['start_page'], item['data']['end_page'] = pages
                else:
                    item['data']['start_page'] = pages[0]
            if key == 'date': # 设置年
                year = content.split('-')
                item['data']['year'] = year[0]

            if key == 'extra': # 设置标题 和摘要翻译
                tmp_str = entry[key]
                # print(tmp_str)
                # ChatGPT正则获取摘要和标题翻译
                result = re.findall(r"titleTranslation:(.*?)(?:\n|$)", tmp_str)
                if result:
                    title_translation = result[0].strip()
                    # print(title_translation)
                else:
                    title_translation = ''
                    # print(label,",未找到 titleTranslation")
                result = re.findall(r'abstractTranslation:(.*?)(?:\n|$)', tmp_str)
                if result:
                    abstract_translation = result[0].strip()
                    # print(abstract_translation)
                else:
                    abstract_translation= ''
                    print(label,",未找到 abstractTranslation")
                result = re.findall(r'影响因子:(.*?)(?:\n|$)', tmp_str)
                if result:
                    IF_my = "IF: "+result[0].strip()
                    # print(abstract_translation)
                else:
                    IF_my=''
                    # print(label,",未找到 IF_my")
                result = re.findall(r'中科院分区升级版:(.*?)(?:\n|$)', tmp_str)
                if result:
                    Qpart = result[0].strip()
                    # print(abstract_translation)
                else:
                    Qpart=""
                    print(label,",未找到 Qpart")   
                item['data']['translateTitle'] = title_translation
                item['data']['translateAbstract'] = abstract_translation
                item['data']['IF_my'] = IF_my
                item['data']['Qpart'] = Qpart

            else:
                item['data'][key] = content
        library[label] = item

    

    # Convert the library with bibtex data to ris
    ris = ''
    for key, item in library.items():
        # if key in keys:
        entry  = ''
        type_ = item_type[item['type']]
        entry += f'TY  - {type_}\n'
        if 'authors' in item:
            for author in item['authors']:
                entry += f'AU  - {author}\n'
        for chunk, data  in item['data'].items():
            if chunk in keys:
                temp = keys[chunk]
                entry += f'{temp}  - {data}\n'
        entry += 'ER  -\n'
        ris += entry

    # save to file
    new_name = f'{os.path.splitext(bib_file)[0]}.ris'
    with open(new_name, 'w',encoding='utf-8') as f:
        f.writelines(ris)
    print("All done")

    # %%

5 导入Endnote

导入RIS,Import option使用Reference Manager(RIS),效果如下:

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值