spacy和displacy输出不同

时间:2017-06-12 10:10:15

标签: python spacy

我的句子是:She had another chemotherapy protocol history with 5-FU alone before this protocol without any significant side effects.

当我把它放在displacy(https://demos.explosion.ai/displacy/)中时,输出包含对5-FU作为名词短语的引用。

enter image description here

然而,当我注释文本并搜索名词块时,我没有将5-FU显示为名词块。

nlp = spacy.load('en') ax = nlp(mySentence) for w in ax.noun_chunks: print(w)

修改的 此外,当我使用以下代码搜索标签时,我将5-FU显示为NN。如果Spacy的注释将这个单例单词理解为由介词包围的名词,为什么不应该将该单词作为名词短语拾取? 最终编辑

我的spacy版本:enter image description here

我做错了什么? displaCy和我使用的版本之间是否有版本差异?是否有spaCy帮助团队来解决这个问题?

非常感谢!

3 个答案:

答案 0 :(得分:3)

在显示解析树时,Displacy会进行一些预处理。以下是displacy使用的解析服务(基于spacy构建)的链接: https://github.com/explosion/spacy-services/blob/master/displacy/displacy_service/parse.py#L25

if collapse_phrases:
    for np in list(self.doc.noun_chunks):
        np.merge(np.root.tag_, np.root.lemma_, np.root.ent_type_)

Spacy merges句子中的名词块而不是将它们视为单独的标记,这就是你的输出不同的原因。

enter image description here

另一个区别是您使用的models。 您可能正在使用最小的en_core_web_sm,而Spacy可能正在使用更大的en_core_web_md(尽管在任何地方都没有正式提及)

答案 1 :(得分:0)

我正在努力解决同样的问题。 DisplayCy和SpaCy输出是不同的(POS标签和单词之间的关系)。

预处理合并是不合理的,因为你可以在DisplayCy中禁用它 - 设置>折叠短语 - 对我来说输出仍然不匹配。

您可能需要使用en_core_web_md模型(而不是en_core_web_sm):

python -m spacy download en_core_web_md

但是我还没有测试过。

答案 2 :(得分:0)

因为他们升级到V2.0 我遇到了类似的问题。然后我搬到了V2.0 要安装模型,您必须使用--direct标志:

以全名下载它
python -m spacy download en_core_web_sm-2.0.0-alpha --direct   # English
python -m spacy download xx_ent_wiki_sm-2.0.0-alpha --direct   # Multi-language NER

您可以通过调用spaCy的加载器来加载模型。例如nlp = spacy.load('en_core_web_sm'),或将其作为模块(import en_core_web_sm)导入,并调用其load()方法,.e.g nlp = en_core_web_sm.load()

按照文档进行操作 https://github.com/explosion/spaCy/releases/tag/v2.0.0-alpha