16

给定一个 bibTex 文件,我需要将各个字段(作者、标题、期刊等)添加到 MySQL 数据库中的表中(使用自定义模式)。

在做了一些初步研究之后,我发现存在Bibutils,我可以使用它来将 bib 文件转换为 xml。我最初的想法是将其转换为 XML,然后在 python 中解析 XML 以填充字典。

我的主要问题是:

  1. 有没有更好的方法可以进行这种转换?
  2. 是否有一个库可以直接解析 bibTex 并为我提供 python 中的字段?

(我确实找到了bibliography.parsing,它在内部使用 bibutils 但没有太多的文档,我发现很难让它工作)。

4

5 回答 5

24

老问题,但我现在正在使用Pybtex库做同样的事情,它有一个内置的解析器:

from pybtex.database.input import bibtex

#open a bibtex file
parser = bibtex.Parser()
bibdata = parser.parse_file("myrefs.bib")

#loop through the individual references
for bib_id in bibdata.entries:
    b = bibdata.entries[bib_id].fields
    try:
        # change these lines to create a SQL insert
        print b["title"]
        print b["journal"]
        print b["year"]
        #deal with multiple authors
        for author in bibdata.entries[bib_id].persons["author"]:
            print author.first(), author.last()
    # field may not exist for a reference
    except(KeyError):
        continue
于 2012-12-27T22:00:09.447 回答
3

我的解决方法是使用 bibtexparser 将相关字段导出到 csv 文件;

import bibtexparser
import pandas as pd

with open("../../bib/small.bib") as bibtex_file:
    bib_database = bibtexparser.load(bibtex_file)
    
df = pd.DataFrame(bib_database.entries)
selection = df[['doi', 'number']]
selection.to_csv('temp.csv', index=False)

然后将 csv 写入数据库中的表中,并删除temp.csv.

这避免了我发现的 pybtex 的一些复杂性。

于 2020-12-02T14:18:05.833 回答
2

你也可以使用 Python BibtexParser:https ://github.com/sciunto/python-bibtexparser

文档:https ://bibtexparser.readthedocs.org

这非常简单(我在生产中使用它)。

郑重声明,我不是这个库的开发者。

于 2014-01-28T18:31:29.043 回答
1

转换为 XML 是个好主意。

XML 作为一种独立于应用程序的数据格式存在,因此您可以使用现成的库对其进行解析;使用它作为中介没有特别的缺点。事实上,您通常可以将 XML 导入数据库,甚至无需通过 Python 之类的编程语言(尽管您必须为这样的任务编写 Python 的数量是微不足道的)。

据我所知,Python 没有直接、成熟的 bibTeX 阅读器。

于 2012-02-10T22:46:53.617 回答
0

您可以使用 Perl 包Bib2ML (aka. Bib2HTML)。它包含一个bib2sql从 BibTeX 数据库生成 SQL 数据库的工具,具有以下架构:

在此处输入图像描述

另一种工具:bibsql 和 bibtosql

然后,您可以通过编写一些 SQL 转换查询将其提供给您的架构。

于 2015-10-17T03:34:44.223 回答