2009-08-17 41 views
17

Tôi đã cố gắng làm cho NLTK (Bộ công cụ ngôn ngữ tự nhiên) hoạt động trên Google App Engine. Các bước tôi theo dõi là:Sử dụng Python NLTK (2.0b5) trên Google App Engine

  1. Tải xuống trình cài đặt và chạy nó (tệp .dmg, như tôi đang sử dụng máy Mac).
  2. sao chép thư mục nltk ra khỏi thư mục site-python và đặt nó làm thư mục con trong thư mục dự án của tôi.
  3. Tạo một module python trong thư mục có chứa các NLTK thư mục con và thêm dòng: from nltk.tokenize import *

Thật không may, sau khi tung ra nó tôi nhận được lỗi này (lưu ý rằng lỗi này được nâng lên sâu bên trong NLTK và tôi đang nhìn thấy nó để cài đặt hệ thống của tôi về python như trái ngược với một trong đó là trong thư mục con của dự án GAE):

<type 'exceptions.ImportError'>: No module named nltk 
Traceback (most recent call last): 
    File "/base/data/home/apps/xxxx/1.335654715894946084/main.py", line 13, in <module> 
    from lingua import reducer 
    File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/reducer.py", line 11, in <module> 
    from nltk.tokenizer import * 
    File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/__init__.py", line 73, in <module> 
    from internals import config_java 
    File "/base/data/home/apps/xxxx/1.335654715894946084/lingua/nltk/internals.py", line 19, in <module> 
    from nltk import __file__ 

Lưu ý: đây là cách lỗi sẽ tìm trong các bản ghi khi tải lên GAE . Nếu tôi chạy nó cục bộ tôi nhận được cùng một lỗi (ngoại trừ nó dường như có nguồn gốc bên trong trang web của tôi-gói ví dụ của NLTK ... do đó, không có sự khác biệt ở đó). Và "xxxx" biểu thị tên dự án.

Vì vậy, trong bản tóm tắt:

  • phải là những gì tôi đang cố gắng để làm thậm chí có thể? NLTK thậm chí có chạy trên App Engine không?
  • Có điều gì tôi đã bỏ lỡ không? Đó là: sao chép "nltk" vào dự án GAE là không đủ?

EDIT: typo cố định và các bước không cần thiết loại bỏ

+4

Bạn đã từng đi xa hơn với điều này chưa? – dfrankow

+0

câu hỏi này đã quá cũ, P – alvas

+0

Tôi đã tạo một PL với ba thay đổi đơn giản cho phép nó hoạt động trên GAE. https://github.com/nltk/nltk/pull/933 –

Trả lời

4

Vấn đề ở đây là nltk đang cố thực hiện nhập khẩu đệ quy: Khi nhập nltk/__init__.py, nhập nltk/internals.py, sau đó nhập lại nltk. Vì nltk đang ở giữa bản thân được nhập, nó không thành công với lỗi (khá không hữu ích).Bất cứ điều gì họ đang làm là khá kỳ lạ anyway - nó không ngạc nhiên một cái gì đó như phá vỡ from nltk import __file__.

Dường như đây là vấn đề với chính nltk - nó có hoạt động khi được nhập trực tiếp từ bảng điều khiển Python không? Nếu vậy, họ phải làm một số loại trickery trong phiên bản cài đặt. Tôi muốn đề nghị hỏi về các nhóm nltk những gì họ đang làm và làm thế nào để làm việc xung quanh nó.

+0

Có! Tất cả dường như đều rơi vào tình trạng nhập lậu của NLTK. Và có, nó hoạt động tốt trên bàn điều khiển. Các giải pháp phải liên quan đến việc đi trong tất cả các tài liệu tham khảo để "nltk" và sửa chữa chúng. Tuy nhiên, điều này không quan trọng vì dường như cũng có vấn đề liên quan đến các gói khác. Vì vậy, tốt nhất là: nó sẽ là tốt đẹp để có một cách chung để giải quyết tất cả các vấn đề nhập khẩu gây phiền nhiễu. –

+0

Có lẽ nếu bạn hỏi người NLTK ý định của họ là gì với các hàng nhập đệ quy kỳ lạ, chúng ta có thể tìm ra cách để nó hoạt động. –

3

NLTK, tôi tin rằng, không cố gắng hết sức mình để được thuần Python như một dự phòng (suy thoái duyên dáng) khi nó không thể có C- phần mở rộng được tăng tốc mã hóa mà nó muốn. Tuy nhiên người ta luôn luôn cần phải được di chuyển với sự chăm sóc hoàn toàn để mạnh dạn tiêm một gói phong phú như vậy (đệ quy nén tất cả các tập tin .py và sử dụng zipimport có thể ít flaky).

NLTK đã cài đặt của tôi, 0,95 Tôi tin rằng, không có ntlk.tokenizer - nó có một nltk.tokenize, không có dấu R, nhưng rõ ràng ngay cả những phút khắc phục lỗi nhất là 100% không thể chấp nhận được khi bạn đang cố gắng nói một máy tính chính xác những gì bạn muốn, vì vậy tôi cho rằng đây không phải là lỗi đánh máy mà bạn sử dụng bản phát hành NLTK hoàn toàn khác và không tương thích, vì vậy, WHAT là phiên bản nào có gói con có tên tokenizer chứ không phải tokenize?

Nếu bạn tìm thấy một chính sách không khoan nhượng đối với lỗi chính tả một char khó chịu, máy tính và chương trình của họ không có khả năng được chấp nhận được đối với bạn ... ;-)

+0

Ah, ok, một lỗi của tôi. Tuy nhiên, đây là một cá trích đỏ (mà tôi sẽ có khả năng phát hiện ra nếu nó không được để có thể nhập * BẤT CỨ * của NLTK) :-) Vì vậy, tại sao nó là tôi cần phải sử dụng zipimport? Tôi thực sự đã không phải làm điều này với một thư viện python trước đây. cảm ơn. –

+0

Bạn không cần phải sử dụng zipimport - nó chỉ là một tiện lợi để đảm bảo rằng bạn có tất cả các tệp .py từ một gói vào một tệp .zip duy nhất không có gì bị bỏ lại hoặc bỏ qua; vì bạn có giới hạn về số lượng tệp và c bạn có thể có trong ứng dụng GAE, nên cũng thuận tiện để tránh giới hạn đó. Nhưng nó chỉ là một vấn đề rõ ràng, tiết kiệm không gian, và giảm sự lúng túng, như tôi đã đề cập, không có gì hơn. Tôi tin rằng bạn có thể sử dụng NLTK trên GAE (ít nhất là tất cả các phần có thể tìm thấy cách giải quyết chấp nhận được vì thiếu các mô-đun mã C ;-). Chỉ định các phiên bản chính xác nếu bạn muốn trợ giúp tho! -) –

+0

2.0b5. Một lần nữa, tôi thấy cùng một lỗi trên cả máy cục bộ của tôi (chạy trong môi trường dev GAE) ngoài Google App Engine. –

8

oakmad đã quản lý để làm việc thành công thông qua triển khai SEVERAL mô-đun NLTK vào GAE. Hi vọng điêu nay co ich. Nhưng, nhưng phải trung thực, tôi vẫn không nghĩ rằng đó là sự thật ngay cả sau khi đọc bài đăng.

+0

Cảm ơn bạn đã liên kết. Điều này đã cho tôi một số gợi ý tốt (mặc dù tôi không nghĩ rằng đó là giải pháp * hoàn chỉnh * cho vấn đề này). –

Các vấn đề liên quan