Spacy 2.xでは、テキストコーパス内の特定のトークンを見つけるためにマッチャーを使用します。各ルールにはID(例:'class-1_0'
)があります。解析中、コールバックon_match
を使用して、それぞれの一致を処理します。コールバックで直接一致を見つけるために使用されるルールを取得するソリューションがありますか?spacyでは、一致するマッチで対応するルールIDを取得できますか
ここは私のサンプルコードです。この場合
txt = ("Aujourd'hui, je vais me faire une tartine au beurre "
"de cacahuète, c'est un pilier de ma nourriture "
"quotidienne.")
nlp = spacy.load('fr')
def on_match(matcher, doc, id, matches):
span = doc[matches[id][1]:matches[id][2]]
print(span)
# find a way to get the corresponding rule without fuzz
matcher = Matcher(nlp.vocab)
matcher.add('class-1_0', on_match, [{'LEMMA': 'pilier'}])
matcher.add('class-1_1', on_match, [{'LEMMA': 'beurre'}, {'LEMMA': 'de'}, {'LEMMA': 'cacahuète'}])
doc = nlp(txt)
matches = matcher(doc)
matches
リターン:
[(12071893341338447867, 9, 12), (4566231695725171773, 16, 17)]
12071893341338447867
がclass-1_0
に基づいて固有のIDです。 matcher._patterns
でイントロスペクションを行っても、元のルール名は見つかりません。
誰かが私を助けることができれば素晴らしいと思います。 ありがとうございます。
ありがとうございます。私はあなたの答えをテストしました、それは正しい方向を指しています。しかし、文字列IDを取得するには、 'match_id'ではなく、整数でエンコードされたマッチルールを使用する必要があります。 'string_id = doc.vocab.strings [matches [id] [0]]' もう一度ありがとうございます。 – k3z
そしてspacy 2.0であなたの信じられないほどの成果を感謝します:) – k3z