Spacy IS_ALPHA matcher-pattern не работает?

Относительно следующей настройки:

import spacy
from spacy.matcher import Matcher
from spacy.attrs import POS, LOWER, IS_ALPHA

nlp_en = spacy.load('en')

text = nlp_en('A nice looking great blue house you have!')

matcher = Matcher(text.vocab)

OP = 'OP'

matcher.add_entity('test')
matcher.add_pattern('test', [
    {LOWER: 'nice'},
    {OP: '*', IS_ALPHA: True},
    {LOWER: 'house'}
    ])

matches = matcher(text)

В этом случае я пытаюсь найти любое слово между nice и house, но сопоставление не даст никакого результата. Также я попытался перевернуть {OP: '*', IS_ALPHA: True} на {IS_ALPHA: True, OP: '*'}, но безрезультатно. Что не так с этим шаблоном?

Версия Spacy: 1.9.0


person Rockbot    schedule 02.10.2017    source источник


Ответы (1)


К сожалению, здесь вы столкнулись с ошибкой в ​​сопоставлении. Операторы реализованы неправильно.

Что происходит, так это то, что оператор переменной длины «*» сопоставляет конечный токен «дом», предотвращая совпадение «дом».

Ошибка возникает всякий раз, когда у вас есть оператор переменной длины, который перекрывается со следующей частью шаблона.

Если у вас есть время и желание, я бы хотел получить по этому поводу запрос на перенос, но, по общему признанию, код сопоставления очень сложен. Вероятно, его следует полностью реализовать заново.

person syllogism_    schedule 02.10.2017
comment
Есть обходной путь? Что-то вроде «что угодно, только не NOUN». Я бы с удовольствием помог, но я думаю, что мои навыки программирования слишком низки. - person Rockbot; 02.10.2017