【问题标题】:How to store spacy doc objects and reload them correctly?如何存储 spacy 文档对象并正确重新加载它们?
【发布时间】:2018-06-11 16:16:55
【问题描述】:

我用 spacy 处理了大约 90 个文档。

import spacy, os

nlp = spacy.load('de')
index = 1
for document in doc_collection:
    doc = nlp(document)
    doc.to_disk('doc_folder/' + str(index))

它似乎工作正常。之后,我想稍后将 doc 文件作为生成器对象重新加载。

def get_spacy_doc_list():
    for file in os.listdir(directory):
        filename = os.fsdecode(file)

        yield spacy.tokens.Doc(spacy.vocab.Vocab()).from_disk('doc_folder/' + filename)


for doc in get_spacy_doc_list():
    for token in doc:
        print(token.lemma_)

如果我尝试这个,那么我会收到以下错误:

KeyError: "[E018] Can't retrieve string for hash '12397158900972795331'."

如何存储和加载 spacy 的 doc 对象而不会出现此错误? 感谢您的帮助!

【问题讨论】:

    标签: python nlp spacy


    【解决方案1】:

    找到解决方案:

    yield spacy.tokens.Doc(spacy.vocab.Vocab()).from_disk('doc_folder/' + filename)
    

    Vocab()-instance 应该是您的 nlp 的特定实例。

    yield spacy.tokens.Doc(nlp.vocab).from_disk('doc_folder/' + filename)
    

    【讨论】:

    • 补充您的答案:您还可以通过调用to_disk() method 来单独序列化Vocab。如果您已添加或修改它,这将特别有用。 (对于共享相同词汇的所有 Doc 对象,您只需执行一次。)
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 2021-01-27
    • 2020-01-15
    • 2020-10-30
    • 2011-11-09
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    相关资源
    最近更新 更多