我想在python中使用优秀的https://spacy.io/库来构建一个倒排索引来标记单词。
它们提供了一个很好的例子,说明如何同时执行预处理,最后得到一个很好的文档列表,可以编制索引。
texts = [u'One document.', u'...', u'Lots of documents']
# .pipe streams input, and produces streaming output
iter_texts = (texts[i % 3] for i in range(100000000))
for i, doc in enumerate(nlp.pipe(iter_texts, batch_size=50, n_threads=4)):
assert doc.is_parsed
if i == 30:
break
print(i)
print(doc)
到目前为止,我还不了解如何使用此方法维护原始文档的关系(文件路径/ URL),即将其作为每个文档的附加属性存储。
答案 0 :(得分:1)
您可能会发现doc.user_data
字典很有用。请注意,它当前未在doc.to_bytes()
输出中序列化,因此您需要单独存储它。序列化为元组(pickle(doc.user_dict), doc.to_bytes())
可能有效。
答案 1 :(得分:0)
这是解决方案 https://github.com/explosion/spaCy/issues/172
def gen_items():
print("Yield 0")
yield (0, 'Text 0')
print("Yield 1")
yield (1, 'Text 1')
print("Yield 2")
yield (2, 'Text 2')
gen1, gen2 = itertools.tee(gen_items())
ids = (id_ for (id_, text) in gen1)
texts = (text for (id_, text) in gen2)
docs = nlp.pipe(texts, batch_size=50, n_threads=4)
for id_, doc in zip(ids, docs):
print(id_, doc.text)