2009-08-17 1 views
17

Я пытаюсь заставить NLTK (Natural Language Toolkit) работать в Google App Engine. Следующие шаги были следующими:Использование Python NLTK (2.0b5) в Google App Engine

  1. Загрузите программу установки и запустите ее (файл .dmg, поскольку я использую Mac).
  2. скопируйте папку nltk из каталога сайтов python-сайтов и поместите ее как подпапку в папку проекта.
  3. Создайте модуль питона в папке, содержащей NLTK вложенную папку и добавьте строку: from nltk.tokenize import *

К сожалению, после его запуска я получаю эту ошибку (обратите внимание, что эта ошибка возникает глубоко внутри NLTK и I «м видя это для моей установки системы питона, в отличие от той, которая находится в подпапке проекта 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__ 

Примечание: это как ошибка выглядит в логах при загрузке на GAE , Если я запустил его локально, то получаю ту же ошибку (за исключением того, что она возникает из моего экземпляра сайта-пакета NLTK ... поэтому никакой разницы нет). И «xxxx» означает название проекта.

Так что в итоге:

  • Это то, что я пытаюсь сделать даже можно? Будет ли NLTK работать в App Engine?
  • Есть ли что-то, что я пропустил? То есть: копирование «nltk» в проект GAE недостаточно?

EDIT: Исправлена ​​опечатка и удалить ненужные шаг

+4

Вы когда-нибудь получали это? – dfrankow

+0

этот вопрос сейчас становится слишком устаревшим, P – alvas

+0

Я создал PL с тремя простыми изменениями, которые позволят ему работать с GAE. https://github.com/nltk/nltk/pull/933 –

ответ

4

Проблема здесь состоит в том, что nltk пытается сделать рекурсивные импорт: Когда nltk/__init__.py импортируется, она импортирует nltk/internals.py, который затем пытается импортировать nltk снова. Поскольку nltk находится в середине самого импорта, он терпит неудачу с (весьма бесполезной) ошибкой.Что бы они ни делали, все равно странно - неудивительно что-то вроде from nltk import __file__ перерывов.

Это похоже на проблему с самим nltk - работает ли она при импорте непосредственно с консоли Python? Если это так, они должны делать какие-то трюки в установленной версии. Я бы посоветовал попросить группы nltk, к чему они стремятся, и о том, как обойти это.

+0

Да! Все это, похоже, сводится к странному импорту NLTK. И да, он отлично работает на консоли. Решение должно включать все ссылки на «nltk» и их исправление. Это, однако, нетривиально, поскольку, похоже, также существуют проблемы, относящиеся к другим пакетам. Поэтому, желательно: было бы неплохо иметь общий способ разрешить все неприятные проблемы с импортом. –

+0

Возможно, если вы спросите людей NLTK, что их намерение связано с странным рекурсивным импортом, мы можем найти способ заставить его работать. –

3

NLTK, я считаю, это попробовать все возможное, чтобы быть чисто-Python в качестве запасного варианта (грациозной деградации), когда он не может иметь C- которые он хотел бы использовать. Однако всегда нужно двигаться с полной осторожностью, чтобы смело вводить такой богатый пакет (рекурсивно застегивая все файлы .py, а использование zipimport может быть менее flaky).

Мой установленный NLTK, 0.95 Я считаю, что у него нет ntlk.tokenizer - он имеет nltk.tokenize, нет конечного R, но, очевидно, даже самая минута такая опечатка на 100% невыносима, когда вы пытаетесь сказать компьютер, который вы хотите, поэтому я предполагаю, что это не опечатка с вашей стороны, а ваше использование совершенно другой и несовместимой версии NLTK, так что WHAT релиз - это то, что имеет подпакет с именем tokenizer, а не tokenize?

Если вы найдете политику нулевой терпимости к один символьные опечаток трудно переносить, компьютеры и их программирование вряд ли терпимой для вас ... ;-)

+0

А, ладно, ошибка с моей стороны. Но это красная селедка (которую я бы наверняка обнаружил, если бы не было возможности импортировать * ЛЮБОЙ * из NLTK) :-) Итак, почему мне нужно использовать zipimport? На самом деле мне не приходилось делать это с помощью библиотеки python. Благодарю. –

+0

Вам не нужно использовать zipimport - это просто удобство, чтобы убедиться, что все .py-файлы из пакета в один .zip-файл ничем не оставлены или не просмотрены; так как у вас есть ограничения на количество файлов и c, которые вы можете иметь в приложении GAE, также удобно избегать этого ограничения. Но это всего лишь вопрос ясности, сэкономить место и уменьшить шелушение, как я уже упоминал, не более того. Я считаю, что вы можете использовать NLTK для GAE (по крайней мере, все части, которые могут найти приемлемые обходные пути из-за отсутствия C-кодированных модулей ;-). Укажите точные версии, если вы хотите помочь tho! -) –

+0

2.0b5. Еще раз, я вижу ту же ошибку на моей локальной машине (работающей в среде GAE dev) в дополнение к Google App Engine. –

8

oakmad удалось успешно работать через развертывание НЕСКОЛЬКО Модули NLTK для GAE. Надеюсь это поможет. Но, если честно, я все еще не думаю, что это правда даже после прочтения сообщения.

+0

Спасибо за ссылку. Это дало мне несколько полезных советов (хотя я не думаю, что это полное решение проблемы). –

Смежные вопросы