我创建了一个脚本,用于抽取许多pdf用于抽象和关键字。我还有一个bibtex文件集合,我想在其中放置我提取的文本。我正在寻找的是一种向bibtex文件添加元素的方法。
我写了一个简短的解析器:
#!/usr/bin/python
#-*- coding: utf-8
import os
from pybtex.database.input import bibtex
dir_path = "nime_archive/nime/bibtex/"
num_texts = 0
class Bibfile:
def __init__(self,bibs):
self.bibs = bibs
for a in self.bibs.entries.keys():
num_text += 1
print bibs.entries[a].fields['title']
#Need to implement a way of getting just the nime-identificator
try:
print bibs.entries[a].fields['url']
except:
print "couldn't find URL for text: %s " % a
print "creating new bibfile"
bibfiles = []
parser = bibtex.Parser()
for infile in os.listdir(dir_path):
if infile.endswith(".bib"):
print infile
bibfiles = Bibfile(parser.parse_file(dir_path+infile))
我的问题是,是否可以使用Pybtex将元素添加到现有的bibtex文件中(或创建一个副本),这样我就可以将我的提取与已经可用的内容合并。如果在Pybtex中无法做到这一点,我还可以使用其他什么bibtex解析器?
答案 0 :(得分:1)
我从未使用过pybtex,但是从快速浏览一下,您就可以添加条目了。由于self.bibs.entries
似乎是dict
,因此您可以提供唯一键,并为其添加更多条目。例如:
key = "some_unique_string"
new_entry = Entry('article',
fields={
'language': u'english',
'title': u'Predicting the Diffusion Coefficient in Supercritical Fluids',
'journal': u'Ind. Eng. Chem. Res.',
'volume': u'36',
'year': u'1997',
'pages': u'888-895',
},
persons={'author': [Person(u'Liu, Hongquin'), Person(u'Ruckenstein, Eli')]},
)
self.bibs.entries[key] = new_entry
(警告:未经测试)
如果你想知道我在哪里得到这个示例表单:看一下pybtex源代码的tests/
子目录。我主要从tests/database_test/data.py
得到了上面的代码示例。如果缺乏实际文档,测试可以成为很好的文档来源。
答案 1 :(得分:0)
.data.add_entry(key,entry)适合我。在这里,我使用了手动创建的条目(取自Evert&#39的示例),但您可以从另一个您正在解析的围兜中复制现有条目。
from pybtex.database.input.bibtex import Parser
from pybtex.core import Entry, Person
key = "some_unique_string"
new_entry = Entry('article',
fields={
'language': u'english',
'title': u'Predicting the Diffusion Coefficient in Supercritical Fluids',
'journal': u'Ind. Eng. Chem. Res.',
'volume': u'36',
'year': u'1997',
'pages': u'888-895',
},
persons={'author': [Person(u'Liu, Hongquin'), Person(u'Ruckenstein, Eli')]},
)
newbib_parser = Parser()
newbib_parser.data.add_entry(key, new_entry)
print newbib_parser.data