2017-11-10 183 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

相關問題