Как сохранить объект пользовательского класса в spaCy.do c и использовать `do c .to_disk`? - PullRequest
0 голосов
/ 15 января 2020

Я хочу сохранить свой объект класса в spacy.Doc и сохранить его с doc.to_disk следующим образом:

from spacy.tokens import Doc
from spacy.vocab import Vocab
from dataclasses import dataclass


@dataclass
class Foo:
    a: int


doc = Doc(Vocab(), [])
doc.user_data["foo"] = Foo(1)
doc.to_disk("/tmp/fooo")

Но этот код вызывает ошибки:

TypeError: can not serialize 'Foo' object

Что я должен сделать?

1 Ответ

1 голос
/ 15 января 2020

По этой теме здесь , вы должны попробовать следующую работу:

    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)
...