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

use*_*061 0 python nlp spacy

我正试图通过我机器上的官方文档工作制作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)
Run Code Online (Sandbox Code Playgroud)

不幸的是我遇到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

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

Ine*_*ani 5

这确实很奇怪,我无法使用您的示例重现错误(在spaCy v2.0.2上,它对我来说非常好).所以最简单的解释是,不知何故,你的脚本实际上是在执行错误的 spacy.(spaCy v1.x也有一个Matcher.add()方法,它有4个位置参数,所以这适合错误.)

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

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

print(spacy.__version__)
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果事实证明你需要重新安装或升级到新版本,也不要忘记下载新版本!