web-dev-qa-db-fra.com

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 alors 

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'essaye de lancer mon code, sur la ligne:

    from spacy.en import English

cela 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'aurais peut-être résolu cela en procédant comme 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>

puis en utilisant:

from spacy.lang.en import English

Je garde toujours cela ouvert au cas où il y aurait d'autres réponses.

19
rayabhik

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

Au fait, ce que vous essayez de faire dans votre code n'est pas tout à fait clair - mais si vous chargez un modèle anglais, il n'est généralement pas nécessaire d'importer et d'initialiser English. SpaCy le fera pour vous.

nlp = spacy.load('en')  # <-- an instance of `English` with data loaded in
doc = nlp(u"This is a text.")

spacy.load('en') est un raccourci pour: 

  1. Recherchez le modèle installé nommé 'en' (un package ou un lien de raccourci).
  2. Lisez son meta.json et vérifiez quelle langue il utilise et à quoi son pipeline de traitement devrait ressembler.
  3. Initialisez la classe de langue et ajoutez-lui le pipeline.
  4. Chargez les poids binaires à partir des données de modèle afin que les composants du pipeline (tels que le tagger, l'analyseur ou le programme de reconnaissance d'entités) puissent effectuer des prédictions.

Voir cette section dans la documentation pour plus de détails.

25
Ines Montani

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
6
anees ahmed

Je devais utiliser en_core_web_sm au lieu de en pour que cela fonctionne. C'est se plaindre 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
3
Elham

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

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

Mais: Le fichier en_core_web_sm n'est pas le même fichier que celui que vous importez depuis spacy.lang.fr. En fait, le premier fichier est produit à partir du second après une formation avec Spacy train dans un jeu de données, puis la mise en forme du résultat. spacy.lang.en contient la définition du modèle: table de recherche lemmas, mots_arrêt, attributs lexicaux (et plus). Mais ça et seulement ça. Il n'est pas formé à un jeu de données afin que le graphe de dépendance et les autres fonctionnalités puissent fonctionner. 

Je pense que cela devrait être assez clair lorsque vous travaillez avec spaCy.

3
gdaras

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 décrit dans spacy

1
Sujay DSa

Toute personne confrontée à ce problème sous Windows 10 et l'installation d'Anaconda, recherchez votre exécutable conda python à l'aide de where python sur la ligne de commande avant d'exécuter le script.

Dans mon cas, le python sur le chemin était 

C:\Users\XXX\.windows-build-tools\python27\python.exe

alors que ce dont j'avais besoin venait de 

c:\Users\XXX\AppData\Local\Continuum\anaconda3\python.exe

Ajoutez simplement le python correct sur le chemin, ou allez à cet emplacement et exécutez 

python -m spacy download en

et ça devrait marcher.

0
fatcook