Spacy IS_ALPHA matcher-pattern无法正常工作?

时间:2017-10-02 09:38:33

标签: python nlp spacy

关于以下设置:

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)

在这种情况下,我试图在nicehouse之间找到任何单词 - 但匹配器不会产生任何结果。我还尝试将{OP: '*', IS_ALPHA: True}翻转到{IS_ALPHA: True, OP: '*'},但也没有结果。这种模式有什么问题?

Spacy版本:1.9.0

1 个答案:

答案 0 :(得分:2)

不幸的是,你在这里遇到了匹配器中的错误。运营商没有正确实施。

正在发生的是可变长度运营商' *'匹配结束令牌' house&#39 ;,阻止' house'从匹配。

只要您的可变长度运算符与模式的下一部分重叠,就会发生错误。

如果你有时间和倾向,我会对此提出拉动请求,但不可否认,匹配代码非常困难。它可能应该完全重新实现。