问题描述
我在尝试使用 spacy matcher
时遇到错误:
~\Anaconda3\lib\site-packages\spacy\matcher\matcher.pyx in spacy.matcher.matcher.Matcher.add()
TypeError: add() takes exactly 2 positional arguments (3 given)
是否有 spacy.matcher.matcher.Matcher.add()
的替代函数?
解决方法
见SpaCy Matcher.add()
documentation:
在 v3.0 中更改
从 spaCy v3.0 开始,Matcher.add
将模式列表作为第二个参数(而不是可变数量的参数)。 on_match
回调成为可选的关键字参数。
patterns = [[{"TEXT": "Google"},{"TEXT": "Now"}],[{"TEXT": "GoogleNow"}]]
- matcher.add("GoogleNow",on_match,*patterns)
+ matcher.add("GoogleNow",patterns,on_match=on_match)
示例用法:
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
pattern = [{"LOWER": "hello"},{"LOWER": "world"}]
matcher.add("HelloWorld",[pattern])
doc = nlp("hello world!")
matches = matcher(doc)
,
此外,如果您要提取多个模式,则示例如下。
import spacy
nlp = spacy.load('en_core_web_sm')
from spacy.matcher import Matcher
matcher = Matcher(nlp.vocab)
pattern1 = [{'LOWER':'solarpower'}]
pattern2 = [{'LOWER':'solar'},{'IS_PUNCT':True},{'LOWER':'power'}]
pattern3 = [{'LOWER':'solar'},{'LOWER':'power'}]
matcher.add('SolarPower',[pattern1,pattern2,pattern3])
doc = nlp(u"The Solar Power industry continues to grow a solarpower increases. Solar-power is good")
found_matches = matcher(doc)
for _,start,end in found_matches:
span = doc[start:end]
print(span)
输出将是:
Solar Power
solarpower
Solar-power
,
而不是使用 matcher.add('Relation_name',None,pattern)
您可以使用:matcher.add('Relation_name',[pattern],on_match=None)
该模式应该用 2 个外部方括号括起来才能工作(粗体以进行说明)。然后它工作并在文本中找到模式
pattern = [[{"TEXT": "iPhone"},{"TEXT": "X"}]]
将模式添加到匹配器
matcher.add("IPHONE_X_PATTERN",模式)