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

时间:2012-02-10 22:43:41

标签: python mysql bibtex

鉴于bibTex文件,我需要将相应的字段(作者,标题,日记等)添加到MySQL数据库中的表中(使用自定义模式)。

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

我的主要问题是:

  1. 我有更好的方式进行转换吗?
  2. 是否有一个直接解析bibTex并在python中为我提供字段的库?
  3. (我确实找到了 bibliography.parsing,它在内部使用了bibutils,但没有太多的文档,我觉得很难让它工作)。

5 个答案:

答案 0 :(得分:23)

老问题,但我现在正在使用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

答案 1 :(得分:1)

转换为XML是一个好主意。

XML作为独立于应用程序的数据格式存在,因此您可以使用随时可用的库来解析它;使用它作为中介没有特别的缺点。实际上,您通常可以将XML导入到数据库中,甚至无需使用Python等编程语言(尽管您为此类任务编写的Python数量很少)。

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

答案 2 :(得分:1)

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

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

非常直接(我在制作中使用它)。

为了记录,我不是这个图书馆的开发者。

答案 3 :(得分:0)

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

enter image description here

替代工具:bibsql and bibtosql

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

答案 4 :(得分:0)

我的解决方法是使用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 I found带来的一些麻烦。