Ошибка при назначении идентификатора метки для span: отсутствует в StringStore - PullRequest
0 голосов
/ 03 июля 2018

, так как я очень новичок в spacy & python, здесь я пытаюсь создать пользовательскую метку для распознавания соответствия фраз, в то время как при синтаксическом анализе я не могу назначить значение хеша для 'label', включая «Ошибка при присвоение метки Id XXXX объекту span "

enter code here
import spacy
from spacy.matcher import PhraseMatcher
from spacy.tokens import Span

class EntityMatcher(object):
    name = 'entity_matcher'

    def __init__(self, nlp, terms, label):
        patterns = [nlp(text) for text in terms]
        self.matcher = PhraseMatcher(nlp.vocab)
        self.matcher.add(label, None, *patterns)

    def __call__(self, doc):
        matches = self.matcher(doc)
        for match_id, start, end in matches:
            span = Span(doc, start, end, label=match_id)
            doc.ents = list(doc.ents) + [span]
        return doc

nlp = spacy.load('en_core_web_sm')
terms = (u'cat', u'dog', u'tree kangaroo', u'giant sea spider')
entity_matcher = EntityMatcher(nlp, terms, 'ANIMAL')

nlp.add_pipe(entity_matcher, after='ner')
print(nlp.pipe_names)  # the components in the pipeline

doc = nlp(u"This is a text about Barack Obama and a tree kangaroo")
print([(ent.text, ent.label_) for ent in doc.ents])

****[Error]****
File "new.py", line 17, in __call__
span = Span(doc, start, end, label=match_id)
File "span.pyx", line 62, in spacy.tokens.span.Span.__cinit__
ValueError: [E084] Error assigning label ID 893087899 to span: not in 
StringStore.

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Я заметил ту же ошибку при использовании маленькой модели en_core_web_sm с Spacy '2.0.16'. Однако, просто переключение на более крупную модель en_core_web_md решило это для меня.

0 голосов
/ 25 февраля 2019

Попробуйте добавить метку в словарь nlp.

from spacy.strings import StringStore

animal_hash = StringStore([u'ANIMAL']) # <-- match id
nlp.vocab.strings.add('ANIMAL')
0 голосов
/ 03 июля 2018

У меня ошибка сегментации при использовании after='ner'. Я удалил параметр, как это,

nlp.add_pipe(entity_matcher)

Никаких других изменений в вашем коде, и получил вывод как,

[('Barack Obama', 'PERSON'), ('tree kangaroo', 'ANIMAL')]

Я не смог воспроизвести вашу ошибку. Пространственная версия '2.0.2'

...