web-dev-qa-db-ja.com

ImportError:「spacy.en」というモジュールはありません

Spacyを使用するコードベースで作業しています。以下を使用してspacyをインストールしました。

Sudo pip3 install spacy

その後

Sudo python3 -m spacy download en

この最後のコマンドの最後に、メッセージが表示されました。

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

さて、コードを実行しようとすると、次の行で:

    from spacy.en import English

次のエラーが表示されます。

ImportError: No module named 'spacy.en'

Stackexchangeを調べたところ、最も近いのは spacyでのインポートエラーです: "enという名前のモジュールはありません" これは私の問題を解決しません。

任意の助けをいただければ幸いです。ありがとう。

編集:私は以下を行うことでこれを解決したかもしれません:

 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>

そして次に使用:

from spacy.lang.en import English

他に答えがある場合に備えて、私はこれを開いたままにしています。

27
rayabhik

はい、ソリューションが正しいことを確認できます。 pipからダウンロードしたspaCyのバージョンはv2.0で、これには多くの新機能が含まれていますが、 APIへのいくつかの変更 も含まれています。その1つは、すべての言語データをサブモジュールspacy.langに移動して、物事を整理して整理することです。したがって、spacy.enを使用する代わりに、spacy.lang.enからインポートします。

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

ただし、spacy download enを実行するときにダウンロードするものはspacy.lang.enとは異なります。 spaCyに同梱されている言語データには、トークン化ルール、ストップワード、または見出し語化テーブルなどの静的データが含まれています。ダウンロードできるenパッケージは、統計モデルen_core_web_smのショートカットです。これには、spaCyが品詞タグ、依存関係、および名前付きエンティティの予測を行うことを可能にするためのバイナリデータだけでなく、言語データも含まれています。

enをダウンロードする代わりに、実際に完全なモデル名を使用することをお勧めします。

python -m spacy download en_core_web_sm
nlp = spacy.load("en_core_web_sm")

spacy.loadを呼び出すと、spaCyは次のことを行います。

  1. "en_core_web_sm"(パッケージまたはショートカットリンク)という名前のインストール済みモデルを見つけます。
  2. meta.jsonを読んで、使用している言語(この場合はspacy.lang.en)と、その処理パイプラインの外観(この場合はtaggerparserner)を確認します。
  3. 言語クラスを初期化し、それにパイプラインを追加します。
  4. パイプラインコンポーネント(タガー、パーサー、エンティティレコグナイザーなど)が予測できるように、モデルデータからバイナリの重みを読み込みます。

詳細については、 ドキュメントのこのセクション を参照してください。

27
Ines Montani

次のコマンドを使用して、anacondaディストリビューションからspacyをインストールしました。

conda install -c conda-forge spacy

その後、次のコマンドを使用してエラーなしで英語をダウンロードできました。

 python -m spacy download en
8
anees ahmed

そのためにはenではなくen_core_web_smを使用しなければなりませんでした。許可の問題について不平を言っています。以下は完全に機能します:

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

提供された回答には混乱があると思います。言及された正しいこと:

  • spacy.lang.enからインポートする必要があります
  • spacy.load( 'en')は、実際にモデルをロードするためのショートカットです。

ただし:ファイルen_core_web_smは、spacy.lang.enからインポートするファイルとは異なります。実際、最初のファイルは、データセット内のスペイシートレインでトレーニングし、結果をパッケージ化した後、2番目から作成されます。 spacy.lang.enには、モデルの定義が含まれています:見出し語検索テーブル、stop_words、字句属性(など)。しかし、それだけです。依存関係グラフやその他の機能が機能するように、データセットでトレーニングされていません。

SpaCyを使用する場合、これは十分に明確であると思います。

4
gdaras

en_core_web_smフォルダーは、spacyフォルダーの外部にダウンロードされました。私はそれをspacy/dataフォルダーにコピーし、spacyで文書化されているようにコードを実行できました

1
Sujay DSa

Windows 10およびAnacondaのインストールでこの問題に直面している方は、スクリプトを実行する前に、コマンドラインでwhere pythonを使用してconda python実行可能ファイルを探してください。

私の場合、PATHのpythonは

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

私が必要なのは

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

パスに正しいpythonを追加するか、この場所に移動して実行します

python -m spacy download en

動作するはずです。

0
fatcook