2017-06-12 93 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