首页 > 解决方案 > 如何在 spaCy 的 Doc.to_disk(path, exclude=['user_data']) 中指定要排除的键/值对?

问题描述

我的 nlp 管道有一些存储 3 个项目的文档扩展名(一个文件名字符串和两个映射不可序列化对象的字典)。我只想排除用户数据中不可序列化的键/值对,但保留文件名。

doc.to_disk(path, exclude=['user_data']) 

按预期工作,不包括所有用户数据。显然有一些选项可以排除 'user_data_keys' 或 'user_data_values' 但我找不到它们的用法的解释,而且我想不出任何好的理由来存储没有值的所有键或没有值的所有值钥匙!

我想排除 doc.user_data 中某些字段的键和值。如果这是可能的,它是如何完成的?

标签: spacydoc

解决方案


您需要指定要排除的键或值。

https://spacy.io/api/doc#serialization-fields

data = doc.to_bytes(exclude=["text", "tensor"])
doc.from_disk("./doc.bin", exclude=["user_data"])

根据此处的此线程,您可以尝试以下解决方法:

    def remove_unserializable_results(doc):
        doc.user_data = {}
        for x in dir(doc._):
            if x in ['get', 'set', 'has']: continue
            setattr(doc._, x, None)
        for token in doc:
            for x in dir(token._):
                if x in ['get', 'set', 'has']: continue
                setattr(token._, x, None)
        return doc

nlp.add_pipe(remove_unserializable_results, last=True)

推荐阅读