Использование Python NLTK (2.0b5) в Google App Engine
Я пытаюсь заставить NLTK (Natural Language Toolkit) работать в Google App Engine. Следующие шаги были следующими:
- Загрузите программу установки и запустите ее (файл .dmg, поскольку я использую Mac).
- скопируйте папку nltk из каталога python site-packages и поместите ее как подпапку в папку проекта.
- Создайте модуль python в папке, содержащей подпапку nltk, и добавьте строку:
from nltk.tokenize import *
К сожалению, после его запуска я получаю эту ошибку (обратите внимание, что эта ошибка возникает глубоко внутри NLTK, и я вижу ее для моей установки системы python, а не той, которая находится в подпапке проекта 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: исправлена опечатка и удалена ненужный шаг
Ответы
Ответ 1
Проблема заключается в том, что nltk
пытается выполнить рекурсивный импорт: при импортировании nltk/__init__.py
он импортирует nltk/internals.py
, который затем пытается снова импортировать nltk
. Поскольку nltk
находится в середине самого импорта, он терпит неудачу с (весьма бесполезной) ошибкой. Что бы они ни делали, все равно странно - это неудивительно, что-то вроде from nltk import __file__
breaks.
Это похоже на проблему с самим nltk - работает ли она при импорте непосредственно с консоли Python? Если это так, они должны делать какие-то трюки в установленной версии. Я предлагаю просить группы nltk, к чему они стремятся, и о том, как обойти это.
Ответ 2
oakmad удалось успешно работать
развертывание модулей НЕСКОЛЬКО NLTK для GAE. Надеюсь это поможет.
Но, но, честно говоря, я до сих пор не считаю это правдой даже после того, как прочитал сообщение.
Ответ 3
Я отклонил NLTK 2.0.3 на github, чтобы запустить его в приложении; токенизация и простая пометка POS, работающая с тегером MaxEnt Treebank.
Ответ 4
NLTK, я считаю, стараюсь изо всех сил быть чистым-Python как откат (изящное ухудшение), когда он не может иметь расширения C-кодированного ускорителя, которые он хотел бы. Однако всегда нужно двигаться с полной осторожностью, чтобы смело вводить такой богатый пакет (рекурсивно застегивая все файлы .py, а использование zipimport может быть менее flaky).
Мой установленный NLTK, 0.95, я считаю, не имеет ntlk.tokenizer - у него есть nltk.tokenize, нет конечного R, но, очевидно, даже самая минута такая опечатка на 100% невыносима, когда вы пытаетесь сказать компьютер точно, что вы хотите, поэтому я предполагаю, что это не опечатка с вашей стороны, а скорее использование совершенно другого и несовместимого выпуска NLTK, так что WHAT релиз - это то, что имеет подпакет с именем tokenizer, а не tokenize?
Если вы найдете политику нулевой терпимости для однократных опечаток, которые не могут быть перенесены, компьютеры и их программирование вряд ли будут терпимы к вам...; -)