Spacy说依赖解析器未加载

时间:2017-11-20 16:01:56

标签: spacy

我在Ubuntu 16.04上安装了spaCy v2.0.2。然后我用

sudo python3 -m spacy download en

下载英文模型。

之后我按如下方式使用Spacy:

from spacy.lang.en import English

p = English(parser=True, tagger=True, entity=True)
d = p("This is a sentence. I am who I am.")
print(list(d.sents))

但是我收到了这个错误:

File "doc.pyx", line 511, in __get__
ValueError: Sentence boundary detection requires the dependency parse, which requires a statistical model to be installed and loaded. For more info, see the documentation: 
https://spacy.io/usage/models

我真的无法弄清楚发生了什么。我有这个版本的' en'安装模型:

https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.0.0/en_core_web_sm-2.0.0.tar.gz

我认为是默认值。任何帮助表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

我认为这里的问题非常简单 - 当你这样称呼时:

p = English(parser=True, tagger=True, entity=True)

... spaCy将加载包含语言数据和特殊情况规则的English语言类,但不加载模型数据和权重,这使得解析器,标记器和实体识别器能够进行预测。这是设计原因,因为spaCy无法知道 if 是否要加载模型数据,如果是,哪个包

因此,如果您要加载英语模型,则必须使用spacy.load(),这将负责加载数据,并将语言和处理管道整合在一起:

nlp = spacy.load('en_core_web_sm')  # name of model, shortcut name or path

在幕后,spacy.load()将查找已安装的名为en_core_web_sm的模型包,加载它并检查模型的元数据以确定模型需要哪种语言(在这种情况下, English)以及它支持的管道(在本例中为tagger,parser和NER)。然后它初始化English的实例,创建管道,从模型包中加载二进制数据并返回对象,以便您可以在文本上调用它。 See this section有关此问题的更详细解释。