2017-10-02 10 views
1

次のセットアップについて: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) 

私は、この場合にはnicehouse間の任意の単語を見つけようとしています - しかし、マッチャーwon't収率任意の結果。また、{OP: '*', IS_ALPHA: True}{IS_ALPHA: True, OP: '*'}にフリップしてみましたが、結果もありませんでした。このパターンに何が問題なのですか?

スペイシーバージョン:1.9.0

答えて

2

あなたが、残念ながら、ここマッチャーのバグをヒットしています。演算子は正しく実装されていません。

可変長演算子 '*'は、終了トークン 'house'と一致し、 'house'がこれまでと一致するのを防ぎます。

バグは、パターンの次の部分と重なる可変長演算子がある場合に発生します。

時間と傾きがある場合は、これについてのプルリクエストが大好きですが、マッチャーコードは非常に困難です。それはおそらく完全に再実装されるべきです。

+0

回避策はありますか?何か「何もない」というようなものです。私は助けたいと思うが、私のコーディングスキルは低すぎると思う – Rockbot

関連する問題