ImportError: pas de module nommé ' spacy.fr'

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

sudo pip3 install spacy

et

sudo python3 -m spacy download en

a la fin de cette dernière commande, j'ai eu 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é Stackexchange et le plus proche est:erreur d'Importation avec spacy: "No module named fr" ce qui ne résout pas mon problème.

Toute aide serait appréciée. Grâce.

Edit: je pourrais avoir résolu ce problème 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>

et puis, à l'aide de:

from spacy.lang.en import English

je garde ça ouvert au cas où il y aurait d'autres réponses.

17
demandé sur eyllanesc 2017-11-15 00:15:08

5 réponses

Oui, je peux confirmer que votre solution est correcte. La version de spaCy que vous avez téléchargé depuis pip est v2.0, qui comprend beaucoup de nouvelles fonctionnalités, mais aussi quelques modifications à L'API. L'un d'eux est que toutes les données de langue ont été déplacées dans un sous-module spacy.lang pour garder les choses propres et mieux organisées. Donc, au lieu d'utiliser spacy.en, vous importez maintenant de spacy.lang.en.

Btw, ce n'est pas exactement clair ce que vous essayiez de faire dans votre code – mais si vous chargez un Modèle anglais, il n'y a généralement pas besoin d'importer et d'initialiser aussi English. spaCy le fera pour toi.

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

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

  1. Trouver le modèle installé nommé 'en' (un lien paquet ou raccourci).
  2. Lire son meta.json et vérifiez la langue qu'il utilise, et l'apparence de son pipeline de traitement.
  3. Initialiser la classe de langue et ajouter le pipeline.
  4. charge dans le les poids binaires à partir des données du modèle de sorte que les composants du pipeline (comme le tagger, l'analyseur parser ou le reconnaisseur d'entité) peuvent faire des prédictions.

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

22
répondu Ines Montani 2017-11-15 00:48:42

j'ai eu à utiliser en_core_web_sm au lieu de fr pour faire ce travail. Il se plaint problème d'autorisation. Le suivant fonctionne parfaitement:

import spacy
spacy.load('en_core_web_sm')
from spacy.lang.en import English
2
répondu Elham 2018-02-13 21:55:45

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
répondu anees ahmed 2018-04-17 12:27:45

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

  • vous devriez 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 que celui que vous importez de spacy.lang.fr. En fait, le premier fichier est produit à partir du deuxième après la formation avec spacy train dans un ensemble de données et ensuite l'emballage du résultat. spacy.lang.en contient la définition du modèle: table de recherche lemmas, stop_words, attributs lexicaux (et plus). Mais ça et seulement ça. Il n'est pas formé avec un ensemble de données de sorte que le graphique de dépendance et d'autres fonctionnalités peuvent fonctionner.

je pense que cela devrait être assez clair quand on travaille avec spaCy.

2
répondu gdaras 2018-05-24 12:07:43

le dossier en_core_web_sm a été téléchargé à l'extérieur 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

1
répondu Sujay DSa 2018-03-20 10:02:23