2017-06-12 3 views
3

Ma phrase est: She had another chemotherapy protocol history with 5-FU alone before this protocol without any significant side effects.sorties planants et displacy différents

Quand je mets cela dans displacy (https://demos.explosion.ai/displacy/), la sortie contient une référence à 5-FU comme syntagme nominal.

enter image description here

Cependant, quand j'annoter le texte et la recherche de morceaux de nom, je ne suis pas montré 5-FU comme un morceau de nom.

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

modifier De plus, lorsque je recherche les balises avec le code ci-dessous on me montre le 5-FU comme NN. Si l'annotation de Spacy comprend ce mot singleton comme un nom entouré de prépositions, pourquoi le mot ne devrait-il pas être considéré comme un syntagme nominal? fin modifier

Ma version spacy: enter image description here

Qu'est-ce que je fais mal? Existe-t-il une différence de version entre displaCy et la version que j'utilise? Existe-t-il une équipe d'aide spaCy pour résoudre ce problème?

Merci beaucoup!

Répondre

2

Displacy effectue un pré-traitement en affichant l'arbre d'analyse. Voici un lien vers le service d'analyse syntaxique (construit sur spacy) utilisé par displacy: 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 les morceaux de nom dans la phrase au lieu de les traiter comme des jetons séparés, c'est pourquoi votre sortie est différente. L'autre différence serait models que vous utilisez. Vous utilisez peut-être le plus petit en_core_web_sm alors que Spacy pourrait utiliser le plus grand en_core_web_md (bien qu'il ne soit officiellement mentionné nulle part)

+0

Merci. L'info sur les modèles est nouvelle! Cependant, dans ma version de Spacy, je reçois 5-FU comme un NN alors qu'il ne se présente toujours pas comme un morceau nominal. Je suis en train de mettre à jour ma question initiale. – mejobhoot

0

J'essaie de résoudre le même problème. Les sorties DisplayCy et SpaCy sont différentes (à la fois les tags POS et les relations entre les mots). Il ne semble pas que la fusion de pré-traitement soit à blâmer, car vous pouvez désactiver cela dans DisplayCy - Paramètres> Réduire les phrases - pour moi, la sortie ne correspond toujours pas.

Il est possible que vous devez utiliser en_core_web_md modèle (non en_core_web_sm):

python -m spacy download en_core_web_md 

Cependant, je n'ai pas testé encore.

+0

Donc .. voici le résultat de mes recherches jusqu'à présent. Le modèle en_core_web_md est beaucoup plus grand et est certainement un cran plus précis que le modèle en_core_web_sm par défaut. Cependant, ce n'est pas parfait (d'ailleurs, aucun n'est, pour ainsi dire). Cependant, DisplayCy utilise un modèle très différent (au moins, en fonction de leur publicité dans le coin supérieur droit de la page web de displaCy, où vous pouvez choisir un modèle: Modèle 0.101.0 (anglais) Ce modèle a été publié début 2016 Pour utiliser ce modèle, vous devez le construire à partir de son code source (ce que je n'ai pas trouvé le temps de faire) – mejobhoot

+0

Donc, fondamentalement, j'ai trouvé le modèle 'md' assez bon et j'ai appris à vivre avec. – mejobhoot

0

Parce qu'ils mettent à jour à V2.0 J'ai fait face au même problème. Puis j'ai déménagé à V2.0 Pour installer un modèle, vous devrez le télécharger avec son nom complet, en utilisant le drapeau --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 

Vous pouvez charger un modèle en appelant le chargeur de spaCy. par exemple. nlp = spacy.load('en_core_web_sm') ou l'importer en tant que module (import en_core_web_sm) et appeler sa méthode load(), par exemple nlp = en_core_web_sm.load().

Suivez la documentation à https://github.com/explosion/spaCy/releases/tag/v2.0.0-alpha