Spacy 2.0 匹配器:add() 至少需要 4 个位置参数(给定 3 个)

Spacy 2.0 Matcher: add() takes at least 4 positional arguments (3 given)

我正在尝试让 Spacy's matcher example from the official documentation 在我的机器上运行。

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 个)

可以找到对应的源码here,重要的部分是

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() 方法,它采用 4 positional arguments,所以这符合错误。)

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

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

print(spacy.__version__)

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