python 中的倒排索引,具有 spacy 作为标记化和与原始文档的持久关系
inverted index in python with spacy as tokenization and persistent relation to original documents
我想在 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),即将它作为每个文档的附加属性存储。
您可能会发现 doc.user_data
词典很有用。请注意,它当前未在 doc.to_bytes()
输出中序列化,因此您需要单独存储它。序列化为元组 (pickle(doc.user_dict), doc.to_bytes())
可能有效。
这是解决方案
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)
我想在 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),即将它作为每个文档的附加属性存储。
您可能会发现 doc.user_data
词典很有用。请注意,它当前未在 doc.to_bytes()
输出中序列化,因此您需要单独存储它。序列化为元组 (pickle(doc.user_dict), doc.to_bytes())
可能有效。
这是解决方案 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)