检查*.bib参考文献是否重复

安装bibtexparser

pip install bibtexparser

代码

import bibtexparser
from difflib import SequenceMatcher


def parse_bib_file(filename):
    with open(filename, 'r', encoding='utf-8') as bibfile:
        bib_database = bibtexparser.load(bibfile)
    return bib_database.entries


def find_duplicates(entries):
    duplicates = dict()
    all_dict = dict()
    NO_ID_Duplicate = True
    for i, entry in enumerate(entries):
        if entry['ID'] in all_dict.keys():
            print('发现重复: ', f"{entry['ID'], entry['title']}")  # ID 重复
            NO_ID_Duplicate = False
            continue
        all_dict[entry['ID']] = entry['title']

    for k, v in all_dict.items():
        out = title_in_values(v, list(all_dict.values()))  # title 重复
        duplicates.update(out)

    return duplicates,NO_ID_Duplicate


def title_in_values(title: str, values: list):
    values.remove(title)
    re_d = dict()
    for i in values:
        ratio = SequenceMatcher(None, i, title).ratio()
        re_d[i] = [title, ratio]

    out = sorted(re_d.items(), key=lambda x: x[1][1], reverse=True)
    out = filter(lambda x: x[1][1] > 0.9, out)

    return dict(out)


def main():
    bib_filename = './file/MAGNet.bib'  # 你的.bib文件名
    entries = parse_bib_file(bib_filename)
    duplicates,NO_ID_Duplicate = find_duplicates(entries)

    if len(duplicates) == 0 and NO_ID_Duplicate:
        print('未发现重复!')
    else:
        for i in duplicates:
            print('发现疑似重复:', i)


if __name__ == "__main__":
    main()

效果

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值