53 votes

ImportError : Aucun module nommé 'spacy.en'.

Je travaille sur une base de code qui utilise Spacy. J'ai installé Spacy en utilisant :

sudo pip3 install spacy

et ensuite

sudo python3 -m spacy download en

A la fin de cette dernière commande, j'ai reçu un message :

    Linking successful
/home/rayabhik/.local/lib/python3.5/site-packages/en_core_web_sm -->
/home/rayabhik/.local/lib/python3.5/site-packages/spacy/data/en

You can now load the model via spacy.load('en')

Maintenant, quand j'essaie d'exécuter mon code, sur la ligne :

    from spacy.en import English

il me donne l'erreur suivante :

ImportError: No module named 'spacy.en'

J'ai regardé sur Stackexchange et le plus proche est.. : Erreur d'importation avec spacy : "Aucun module nommé en". ce qui ne résout pas mon problème.

Toute aide serait appréciée. Merci.

Edit : J'ai peut-être résolu le problème en faisant ce qui suit :

 Python 3.5.2 (default, Sep 14 2017, 22:51:06) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import spacy
>>> spacy.load('en')
<spacy.lang.en.English object at 0x7ff414e1e0b8>

et ensuite utiliser :

from spacy.lang.en import English

Je garde la question ouverte au cas où il y aurait d'autres réponses.

1 votes

Merci, changer la ligne a résolu mon problème aussi ! Comment avez-vous trouvé la solution ?

1 votes

@yuqli : Je ne me souviens pas exactement, mais je pense que je passais par la source.

2 votes

Fonctionne également pour l'allemand avec sudo python3 -m spacy download de

63voto

Ines Montani Points 2559

Oui, je peux confirmer que votre solution est correcte. La version de spaCy que vous avez téléchargée depuis pip est la v2.0, qui inclut beaucoup de nouvelles fonctionnalités, mais aussi quelques modifications de l'API . L'une d'entre elles est que toutes les données linguistiques ont été déplacées vers un sous-module spacy.lang pour garder les choses plus propres et mieux organisées. Ainsi, au lieu d'utiliser spacy.en vous importez maintenant de spacy.lang.en .

- from spacy.en import English
+ from spacy.lang.en import English

Toutefois, il convient également de mentionner que ce que vous téléchargez lorsque vous exécutez le programme spacy download en n'est pas la même chose que spacy.lang.en . Les données linguistiques livrées avec spaCy comprennent les données statiques comme les règles de tokénisation, les mots d'arrêt ou les tables de lemmatisation. Le site en que vous pouvez télécharger est un raccourci pour le modèle statistique en_core_web_sm . Il comprend les données de la langue, ainsi que le poids binaire pour permettre à spaCy de faire des prédictions pour les balises de parties du discours, les dépendances et les entités nommées.

Au lieu de simplement télécharger en Je recommande en fait d'utiliser le nom complet du modèle, ce qui permet de mieux comprendre ce qui se passe :

python -m spacy download en_core_web_sm

nlp = spacy.load("en_core_web_sm")

Lorsque vous appelez spacy.load le spaCy fait ce qui suit :

  1. Trouvez le modèle installé nommé "en_core_web_sm" (un paquet ou un lien de raccourci).
  2. Lire son meta.json et vérifier quelle langue il utilise (dans ce cas, spacy.lang.en ), et comment son pipeline de traitement doit se présenter (dans ce cas, tagger , parser y ner ).
  3. Initialiser la classe de langue et y ajouter le pipeline.
  4. Chargez les poids binaires des données du modèle pour que les composants du pipeline (comme l'étiqueteur, l'analyseur syntaxique ou la reconnaissance d'entités) puissent faire des prédictions.

Voir cette section dans les docs pour plus de détails.

1 votes

Merci beaucoup Ines. Oui, j'ai vu qu'il n'y avait pas besoin d'importer l'anglais. Il s'agit d'un code écrit par quelqu'un d'autre, et je n'ai pas le temps de le nettoyer pour le moment, mais j'espère pouvoir le faire plus tard.

4 votes

J'ai utilisé la version 2.0.12 et les versions supérieures ne fonctionnent pas. @gdaras solution de from spacy.lang.en import English fonctionne.

0 votes

@Anil_M vous devriez en faire une réponse ! Elle fonctionne alors que la réponse acceptée ne fonctionne pas pour les versions ultérieures de 2.0.x.

15voto

anees ahmed Points 81

J'ai utilisé la commande suivante pour installer spacy à partir de la distribution anaconda.

conda install -c conda-forge spacy

et après cela, j'ai pu télécharger l'anglais en utilisant la commande suivante sans aucune erreur.

 python -m spacy download en

2 votes

Cela a aidé pour une installation conda + venv.

9voto

Elham Points 88

J'ai dû utiliser en_core_web_sm au lieu de sur pour que ça marche. Il se plaint d'un problème de permission. Ce qui suit fonctionne parfaitement :

import spacy
spacy.load('en_core_web_sm')
from spacy.lang.en import English

4voto

gdaras Points 1556

Je pense qu'il y a une confusion dans les réponses fournies. Les choses correctes sont mentionnées :

  • vous devez importer de spacy.lang.en
  • spacy.load('en') est en effet un raccourci pour charger les modèles.

Mais : le fichier en_core_web_sm n'est pas le même que celui que vous importez de spacy.lang.en. En fait, le premier fichier est produit à partir du second après l'entraînement avec spacy train dans un jeu de données, puis l'empaquetage du résultat. spacy.lang.en contient la définition du modèle : table de consultation des lemmes, mots d'arrêt, attributs lexicaux (et plus encore). Mais c'est tout et seulement cela. Il n'est pas entraîné avec un jeu de données pour que le graphe de dépendance et les autres fonctionnalités puissent fonctionner.

Je pense que cela devrait être suffisamment clair lorsque l'on travaille avec spaCy.

1voto

Sujay DSa Points 505

Le dossier en_core_web_sm a été téléchargé en dehors du dossier spacy. Je l'ai copié dans le dossier spacy/data et j'ai pu exécuter le code tel que documenté dans spacy.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X