Python Spacy 2.0 Matcher:add()至少接受4个位置参数(给定3个)

Python Spacy 2.0 Matcher:add()至少接受4个位置参数(给定3个),python,nlp,spacy,Python,Nlp,Spacy,我正试图从我的机器上的工作中获益 from spacy.matcher import Matcher matcher = Matcher(nlp.vocab) pattern = [{'LOWER': "hello"}, {'LOWER': "world"}] matcher.add("HelloWorld", None, pattern) doc = nlp(u'hello world!') matches = matcher(doc) 不幸的是,我遇到了以下错误: TypeErr

我正试图从我的机器上的工作中获益

from spacy.matcher import Matcher

matcher = Matcher(nlp.vocab) 
pattern = [{'LOWER': "hello"}, {'LOWER': "world"}] 
matcher.add("HelloWorld", None, pattern) 
doc = nlp(u'hello world!') 
matches = matcher(doc)
不幸的是,我遇到了以下错误:

TypeError:add()至少接受4个位置参数(给定3个)

可以找到相应的源代码,重要的部分是

def add(self, key, on_match, *patterns):
    """Add a match-rule to the matcher. A match-rule consists of: an ID
        key, an on_match callback, and one or more patterns.

Spacy最近已更新到2.0版,我安装了该版本,并成功地将英文模型链接到该版本。感觉我在这里遗漏了一些非常明显的东西,但我看不出我做错了什么。

这确实很奇怪,我无法使用您的示例重现错误(在spaCy v2.0.2上,它对我来说运行得非常好)。因此,最简单的解释是,不知何故,您的脚本实际上执行了错误的
spacy
。(spaCy v1.x还有一个
Matcher.add()
方法,该方法花费了大量时间,因此这将适合错误。)

如果以前安装了spacy v1.x,并且它仍然在您的
PYTHONPATH
上(在不同的环境、系统Python等中),则可能会执行错误的
spacy
。也可能是您安装了spaCy,但忘记告诉pip升级,即运行
pip install-U spaCy

最简单的方法是在文件顶部添加以下行:

print(spacy.__version__)

顺便说一句,如果您需要重新安装或升级到新版本,也不要忘记下载新型号

这确实很奇怪,我无法使用您的示例重现错误(在spaCy v2.0.2上,它对我来说运行得非常好)。因此,最简单的解释是,不知何故,您的脚本实际上执行了错误的
spacy
。(spaCy v1.x还有一个
Matcher.add()
方法,该方法花费了大量时间,因此这将适合错误。)

如果以前安装了spacy v1.x,并且它仍然在您的
PYTHONPATH
上(在不同的环境、系统Python等中),则可能会执行错误的
spacy
。也可能是您安装了spaCy,但忘记告诉pip升级,即运行
pip install-U spaCy

最简单的方法是在文件顶部添加以下行:

print(spacy.__version__)

顺便说一句,如果您需要重新安装或升级到新版本,也不要忘记下载新型号

事实证明,我在设置新环境时忘记告诉virtualenv使用Python 3。因此,它确实使用了Spacy版本1。感谢您的提示,非常感谢Spacy core团队反应如此之快。事实证明,我在设置新环境时忘了告诉virtualenv使用Python 3。因此,它确实使用了Spacy版本1。谢谢你的提示,非常感谢Spacy核心团队反应如此之快。