Spacy PhraseMatcher Значение error Длина шаблона (11)> = фраза_matcher.max_length (10) - PullRequest
0 голосов
/ 25 апреля 2018

Я получаю следующую ошибку при инициализации нового PhraseMatcher со списком терминов:

ValueError: Длина шаблона (11)> = фраза_matcher.max_length (10). Длина может быть установлена ​​при инициализации, до 10.

patterns = [nlp(org) for org in fields]
        self.matcher = PhraseMatcher(nlp.vocab)
        self.matcher.add('FIELD', None, *patterns)

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Вы можете попытаться определить класс как сопоставление сущностей и выполнить цикл по различным шаблонам / полям

  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) 

  return doc  
0 голосов
/ 25 апреля 2018

В настоящее время длина одного правила не может превышать 10 токенов:

# Allowed
'one two three four five six seven eight nine ten'
# Not Allowed
'one two three four five six seven eight nine ten eleven'

Вы можете попытаться установить более высокое ограничение, т. Е .: self.matcher = PhraseMatcher(nlp.vocab, max_length=20), но iirc в текущей версии SpaCy 10это жесткий предел.

См. соответствующую документацию на https://spacy.io/api/phrasematcher#init и источник на https://github.com/explosion/spacy/blob/master/spacy/matcher.pyx#L452

...