python中的反向索引,spacy作为标记化和与原始文档的持久关系

时间:2017-03-23 14:47:35

标签: python nlp inverted-index spacy

我想在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),即将其作为每个文档的附加属性存储。

2 个答案:

答案 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)