web-dev-qa-db-de.com

ImportError: Kein Modul mit dem Namen 'spacy.en'

Ich arbeite an einer Codebase, die Spacy verwendet. Ich habe Spacy installiert mit:

Sudo pip3 install spacy

und dann 

Sudo python3 -m spacy download en

Am Ende dieses letzten Befehls erhielt ich eine Nachricht:

    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')

Nun, wenn ich versuche, meinen Code in der Zeile auszuführen:

    from spacy.en import English

es gibt folgende Fehlermeldung:

ImportError: No module named 'spacy.en'

Ich habe mir Stackexchange angesehen und das nächste ist: Importfehler mit spacy: "Kein Modul mit dem Namen en" Was mein Problem nicht löst.

Jede Hilfe wäre dankbar. Vielen Dank.

Edit: Ich hätte das Problem möglicherweise folgendermaßen gelöst:

 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>

und dann mit:

from spacy.lang.en import English

Ich halte das immer noch offen, falls es andere Antworten gibt.

19
rayabhik

Ja, ich kann bestätigen, dass Ihre Lösung korrekt ist. Die von pip heruntergeladene Version von spaCy ist v2.0, die viele neue Funktionen enthält, aber auch ein paar Änderungen an der API . Eine davon ist, dass alle Sprachdaten in ein Submodul spacy.lang verschoben wurden, um die Sache sauberer und besser organisiert zu halten. Anstatt spacy.en zu verwenden, importieren Sie jetzt spacy.lang.en.

Übrigens ist nicht genau klar, was Sie in Ihrem Code versucht haben. Wenn Sie jedoch ein englisches Modell laden, müssen Sie normalerweise English nicht importieren und initialisieren. spaCy erledigt das für Sie.

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

Grundsätzlich ist spacy.load('en') eine Abkürzung für: 

  1. Suchen Sie das installierte Modell mit dem Namen 'en' (Paket- oder Verknüpfungslink).
  2. Lesen Sie seinen meta.json und prüfen Sie, welche Sprache verwendet wird und wie die Verarbeitungspipeline aussehen soll.
  3. Initialisieren Sie die Sprachklasse und fügen Sie die Pipeline hinzu.
  4. Laden Sie die binären Gewichtungen aus den Modelldaten, damit Pipelinekomponenten (wie Tagger, Parser oder Entitätenerkenner) Vorhersagen treffen können.

Siehe diesen Abschnitt in den Dokumenten für weitere Details.

25
Ines Montani

Ich habe den folgenden Befehl zum Installieren von spacy aus der Anaconda-Distribution verwendet.

conda install -c conda-forge spacy

danach konnte ich mit folgendem Befehl Englisch ohne Fehler herunterladen.

 python -m spacy download en
6
anees ahmed

Ich musste en_core_web_sm anstelle von en verwenden, um diese Funktion auszuführen. Es klagt über Erlaubnisproblem. Folgendes funktioniert perfekt:

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

Ich denke, dass die Antworten eine Verwirrung darstellen. Richtige Dinge erwähnt:

  • sie sollten aus spacy.lang.en importieren 
  • spacy.load ('en') ist in der Tat eine Abkürzung für das Laden von Modellen.

Aber: Die Datei en_core_web_sm ist nicht dieselbe Datei wie die Datei, die Sie aus spacy.lang.en importieren. Tatsächlich wird die erste Datei aus der zweiten Datei nach dem Training mit Spacy Train in einem Datensatz erstellt und das Ergebnis verpackt. spacy.lang.en enthält die Modelldefinition: Lemmas-Lookup-Tabelle, stop_words, lexikalische Attribute (und mehr). Aber das und nur das. Es wird nicht mit einem Dataset trainiert, damit der Abhängigkeitsgraph und andere Funktionen funktionieren können. 

Ich denke, das sollte bei der Arbeit mit spaCy klar genug sein.

3
gdaras

der en_core_web_sm-ordner wurde außerhalb des spy-ordners heruntergeladen. Ich habe es in den Ordner spacy/data kopiert und konnte den Code so ausführen, wie dies in spacy dokumentiert ist

1
Sujay DSa

Wenn Sie bei der Installation von Windows 10 und Anaconda mit diesem Problem konfrontiert sind, suchen Sie mit where python in der Befehlszeile nach der ausführbaren Conda Python-Datei, bevor Sie das Skript ausführen.

In meinem Fall war der Python auf dem PATH 

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

wohingegen ich brauchte von 

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

Fügen Sie einfach den richtigen Python in den Pfad ein oder gehen Sie zu diesem Speicherort und führen Sie ihn aus 

python -m spacy download en

und es sollte funktionieren.

0
fatcook