关于以下设置:
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
答案 0 :(得分:2)
不幸的是,你在这里遇到了匹配器中的错误。运营商没有正确实施。
正在发生的是可变长度运营商' *'匹配结束令牌' house&#39 ;,阻止' house'从匹配。
只要您的可变长度运算符与模式的下一部分重叠,就会发生错误。
如果你有时间和倾向,我会对此提出拉动请求,但不可否认,匹配代码非常困难。它可能应该完全重新实现。