Source code for PyOpenWorm.bibtex
import re
import bibtexparser
from .evidence import Evidence
from .bibtex_customizations import customizations
[docs]def bibtex_to_document(bibtex_entry, context=None):
""" Takes a single BibTeX entry and translates it into a Document object """
from PyOpenWorm.document import Document
res = Document.contextualize(context)()
update_document_with_bibtex(res, bibtex_entry)
return res
def update_document_with_bibtex(document, bibtex_entry):
document.set_key(bibtex_entry['ID'])
for ath in bibtex_entry.get('author', tuple()):
document.author(ath)
fields = ['title',
'year',
'author',
'doi',
('link', 'uri')]
for x in fields:
if isinstance(x, tuple):
key, prop = x
else:
prop = x
key = x
for m in bibtex_entry.get(key, ()):
getattr(document, prop)(m)
def make_default_bibtex_parser():
parser = bibtexparser.bparser.BibTexParser(common_strings=True)
parser.customization = customizations
return parser
def loads(bibtex_string):
parser = make_default_bibtex_parser()
return bibtexparser.loads(bibtex_string, parser=parser)
def load(bibtex_file):
parser = make_default_bibtex_parser()
return bibtexparser.load(bibtex_file, parser=parser)
def load_from_file_named(file_name):
with open(file_name) as bibtex_file:
return load(bibtex_file)
def parse_bibtex_into_documents(file_name, context=None):
res = dict()
bib_database = load_from_file_named(file_name)
for entry in bib_database.entries:
entry_id = entry['ID']
res[entry_id] = bibtex_to_document(entry, context)
return res
def parse_bibtex_into_evidence(file_name, context=None):
return {k: Evidence.contextualize(context)(reference=v, supports=v.contextualize(context).as_context.rdf_object)
for k, v
in parse_bibtex_into_documents(file_name, context).items()}