Автоматическое добавление DOI в справочный файл BibTexPython

Программы на Python
Ответить
Anonymous
 Автоматическое добавление DOI в справочный файл BibTex

Сообщение Anonymous »

У меня есть файл с именем ref.bib (txt-файл), содержащий список статей в формате BibTeX. Например, вот одна статья:
@article{campbell2020beyond,
title={Beyond zero trust: Trust is a vulnerability},
doi = {10.1109/MC.2020.3011081},
author={Campbell, Mark},
journal={Computer},
volume={53},
number={10},
pages={110--113},
year={2020},
publisher={IEEE}
}

Я хотел бы добавить DOI к каждой статье в файле с помощью поиска в Интернете. Результатом приведенного выше примера будет (ref.bib):
@article{campbell2020beyond,
title={Beyond zero trust: Trust is a vulnerability},
author={Campbell, Mark},
journal={Computer},
volume={53},
number={10},
pages={110--113},
year={2020},
publisher={IEEE},
DOI = {10.1109/MC.2020.3011081}
}

Как это можно сделать на Python? Есть ли способ изменить следующий код, чтобы улучшить поиск в Интернете?
import requests
import bibtexparser
from bibtexparser.bwriter import BibTexWriter
import sys

def search_doi(title, author):
"""Search for the DOI using the CrossRef API."""
query = f"{title} {author}"
url = f"https://api.crossref.org/works?query={query}"
response = requests.get(url)

if response.status_code == 200:
data = response.json()
items = data['message']['items']
if items:
return items[0]['DOI'] # Return the first DOI found
return None

def add_doi_to_bibtex(bibtex_file):
"""Add DOI to each entry in the BibTeX file."""
with open(bibtex_file) as f:
bibliography = bibtexparser.load(f)

for entry in bibliography.entries:
if 'doi' not in entry or entry['doi'].isspace():
title = entry.get('title', '')
author = entry.get('author', '')
doi = search_doi(title, author)
if doi:
entry['doi'] = doi
print(f"Added DOI {doi} to entry: {title}")

# Write the updated bibliography to a new file
writer = BibTexWriter()
with open(bibtex_file.replace('.bib', '_updated.bib'), 'w') as f:
f.write(writer.write(bibliography))

if __name__ == "__main__":
if len(sys.argv) != 2:
print("Usage: python add_doi.py ")
else:
add_doi_to_bibtex(sys.argv[1])


Подробнее здесь: https://stackoverflow.com/questions/792 ... rence-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»