Преобразование файла BibTex в записи базы данных с использованием Python

Учитывая файл bibTex, мне нужно добавить соответствующие поля (автор, заголовок, журнал и т.д.) в таблицу в базе данных MySQL (с помощью специальной схемы).

После некоторых начальных исследований я обнаружил, что существует Bibutils, который я мог бы использовать для преобразования файла bib в xml. Моя первоначальная идея состояла в том, чтобы преобразовать его в XML и затем проанализировать XML в python для заполнения словаря.

Мои главные вопросы:

  • Есть ли лучший способ сделать это преобразование?
  • Есть ли библиотека, которая непосредственно анализирует bibTex и дает мне поля в python?

(Я нашел bibliography.parsing, который использует внутренние библиотеки, но на нем мало документации, и мне трудно получить его работать).

Ответы

Ответ 1

Старый вопрос, но сейчас я делаю то же самое, используя библиотеку 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

Ответ 2

Преобразование в XML - прекрасная идея.

XML существует как независимый от приложения формат данных, поэтому вы можете анализировать его с помощью доступных библиотек; использование его в качестве посредника не имеет особых недостатков. Фактически, вы можете импортировать XML в базу данных, даже не проходя язык программирования, такой как Python (хотя количество Python, которое вам нужно написать для такой задачи, тривиально).

Насколько я знаю, нет прямого, зрелого читателя bibTeX для Python.

Ответ 4

Вы можете использовать пакет Perl Bib2ML (он же Bib2HTML). Он содержит инструмент bib2sql, который генерирует базу данных SQL из базы данных BibTeX со следующей схемой:

введите описание изображения здесь

Альтернативный инструмент: bibsql и bibtosql.

Затем вы можете отправить его в свою схему, написав некоторые запросы на преобразование SQL.