2017-11-10 181 views
0

我试图在我的机器上从official documentation工作中使Spacy'smatcher example工作。Spacy 2.0匹配器:add()至少需要4个位置参数(给出3个)

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) 

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

类型错误:添加()采用至少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版,我安装了编辑该版本,并成功地将英文模型与它联系起来。感觉我在这里错过了一些非常明显的东西,但我不明白我做错了什么。

回答

5

这确实很奇怪,我无法使用您的示例重现错误(在spaCy v2.0.2上,它对我来说工作得非常好)。所以最简单的解释是,你的脚本实际上是在执行错误的spacy。 (spaCy 1.x版也有一个Matcher.add()方法,历时4 positional arguments,所以这将适合的错误。)

执行了错误的spacy如果您以前安装的spaCy 1.x版可能发生,它仍然在你的PYTHONPATH(以不同的环境,系统Python等)。也可能是您安装了spaCy,但忘记告诉pip升级,即通过运行pip install -U spacy

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

print(spacy.__version__) 

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

+1

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

相关问题