2017-06-12 49 views
3

我的句子是:She had another chemotherapy protocol history with 5-FU alone before this protocol without any significant side effects.spacy和displacy输出不同

当我把这种在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版本:​​

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

非常感谢!

回答

2

显示在显示分析树时进行一些预处理。这里是一个链接,通过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名词块,这就是为什么你的输出是不同的。

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

+0

感谢文档。关于模型的信息是新的!然而,在我的Spacy版本中,我将5-FU视为一个NN,但它仍不能作为名词块。我正在更新我的原始问题。 – mejobhoot

0

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

它看起来不像预处理合并是责怪,因为你可以禁用DisplayCy - Settings> Collapse Phrases - 对我来说输出仍然不匹配。

这有可能是你需要使用en_core_web_md模型(不en_core_web_sm):

python -m spacy download en_core_web_md 

但是我还没有测试过呢。

+0

所以..这是我迄今研究的结果。 en_core_web_md模型要大得多,而且肯定比默认的en_core_web_sm模型更精确。然而,这并不完美(对此,没有人可以这么说)。然而,DisplayCy使用了一个非常不同的模型(根据他们在displaCy网页右上角的广告,您可以选择一个模型:Model 0.101.0(english)。该模型在2016年初某个时候发布。要使用这个模型,你必须从他们的源代码构建它(我没有时间去做) – mejobhoot

+0

所以基本上 - 我发现'md'模型足够好,并且学会了与它一起生活。 – mejobhoot

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()方法,例如nlp = en_core_web_sm.load()

按照在 https://github.com/explosion/spaCy/releases/tag/v2.0.0-alpha