使用Python将BibTex文件转换为数据库条目

17

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

经过一些初步的研究,我发现存在Bibutils可以将bib文件转换为xml。我的初步想法是将其转换为XML,然后在Python中解析XML以填充字典。

我的主要问题是:

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

(我确实找到了bibliography.parsing,它在内部使用bibutils,但是文档不多,而且我发现很难让它正常工作)。


请在 http://tex.stackexchange.com/ 上提问。 - Martin Schröder
5个回答

26

虽然这是一个老问题,但我现在正在使用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

5

我的解决办法是使用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相关的复杂问题。


3

主要仓库在这里:https://github.com/sciunto-org/python-bibtexparser。 - Warm_Duscher

2

将内容转换成XML是个好主意。

XML作为一种应用程序无关的数据格式存在,因此您可以使用现成的库进行解析;将它用作中介没有特定的缺点。事实上,通常您甚至可以在不经过像Python这样的编程语言的情况下将XML导入数据库(虽然您需要为此类任务编写的Python代码量很少)。

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


1
您可以使用Perl包Bib2ML(又名Bib2HTML)。它包含一个bib2sql工具,该工具从BibTeX数据库生成SQL数据库,其模式如下:

enter image description here

另一种工具:bibsql和bibtosql

然后,您可以编写一些SQL转换查询将其输入到模式中。


经过很长一段时间,我对你做的这些图表非常感兴趣。请问你能分享一下你是如何创建它们的吗? - MEdwin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接