2017-11-14 39 views
6

Tôi đang làm việc trên một codebase sử dụng Spacy. Tôi đã cài đặt Spacy sử dụng:ImportError: Không có mô đun nào có tên 'spacy.en'

sudo pip3 install spacy 

và sau đó

sudo python3 -m spacy download en 

Vào cuối lệnh cuối cùng này, tôi nhận được tin nhắn:

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

Bây giờ, khi tôi cố gắng chạy mã của tôi, trên dòng:

from spacy.en import English 

nó mang lại cho tôi những lỗi sau:

ImportError: No module named 'spacy.en' 

Tôi đã nhìn vào Stackexchange và gần nhất là: Import error with spacy: "No module named en" mà không giải quyết vấn đề của tôi.

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn.

Edit: Tôi có thể đã giải quyết điều này bằng cách làm như sau:

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> 

và sau đó sử dụng:

from spacy.lang.en import English 

Tôi vẫn đang giữ này mở trong trường hợp có bất kỳ câu trả lời khác.

+1

Cảm ơn, thay đổi dòng đã giải quyết được sự cố của tôi! Làm thế nào bạn tìm ra nó? – yuqli

+1

@yuqli: Tôi không nhớ chính xác, nhưng tôi nghĩ rằng tôi đã đi qua nguồn. – rayabhik

+0

Cũng hoạt động cho tiếng Đức với 'sudo python3 -m spacy tải về de' – nik

Trả lời

8

Có, tôi có thể xác nhận rằng giải pháp của bạn là chính xác. Phiên bản spaCy bạn tải xuống từ pip là v2.0, bao gồm rất nhiều tính năng mới, nhưng cũng là a few changes to the API. Một trong số đó là tất cả dữ liệu ngôn ngữ đã được chuyển đến một mô hình con spacy.lang để giữ cho mọi thứ sạch hơn và được tổ chức tốt hơn. Vì vậy, thay vì sử dụng spacy.en, bây giờ bạn nhập từ spacy.lang.en.

Btw, không rõ bạn đang cố gắng làm gì trong mã của mình - nhưng nếu bạn đang tải một mô hình tiếng Anh, thường không cần phải nhập và khởi tạo English. spaCy sẽ làm điều này cho bạn.

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

Về cơ bản, spacy.load('en') là một phím tắt cho:

  1. Tìm mô hình cài đặt tên 'en' (một gói hoặc liên kết phím tắt).
  2. Đọc số meta.json và kiểm tra xem ngôn ngữ nào đang sử dụng và cách xử lý đường ống xử lý của ngôn ngữ đó.
  3. Khởi tạo lớp ngôn ngữ và thêm đường dẫn vào đó.
  4. Tải trọng số nhị phân từ dữ liệu mô hình để các thành phần đường ống (như trình gắn thẻ, trình phân tích cú pháp hoặc trình nhận dạng đối tượng) có thể dự đoán.

Xem this section in the docs để biết thêm chi tiết.

+0

Cảm ơn một loạt Ines. Có, tôi đã thấy rằng không cần phải nhập tiếng Anh. Đây là mã được viết bởi người khác, và tôi không có thời gian để làm sạch nó ngay bây giờ, nhưng hy vọng sau này. – rayabhik

0

Tôi phải sử dụng en_core_web_sm thay vì vi để thực hiện công việc đó. Nó đang phàn nàn về vấn đề quyền.Các công trình sau hoàn hảo:

import spacy 
spacy.load('en_core_web_sm') 
from spacy.lang.en import English 
Các vấn đề liên quan