这听起来像是一个命名错误,我猜你为另一个文本应用了匹配器,并且 matcher_id 变得不同,所以这很混乱。
要解决它,请确保您对相同的文本使用相同的匹配器,如下所示:
执行标准导入、重置 nlp 、 PhraseMatcher 库
import spacy
nlp = spacy.load('en_core_web_sm')
from spacy.matcher import PhraseMatcher
matcher = PhraseMatcher(nlp.vocab)
dd = 'refers to the economic policies associated with supply-side economics, voodoo economics'
doc3 = nlp(dd) # convert string to spacy.tokens.doc.Doc
首先,创建一个匹配短语列表:
phrase_list = ['voodoo economics', 'supply-side economics', 'free-market economics']
接下来,将每个短语转换为 Doc 对象:
phrase_patterns = [nlp(text) for text in phrase_list]
将每个 Doc 对象传递给匹配器(注意星号的使用!):
matcher.add('VoodooEconomics', None, *phrase_patterns)
建立匹配列表:
matches = matcher(doc3)
matches #(match_id, start, end)
查看比赛:
for match_id, start, end in matches: # the matcher have to be the same one that we build on this text
string_id = nlp.vocab.strings[match_id]
span = doc3[start:end]
print(match_id, string_id, start, end, span.text)