2009-08-17 11 views
17

He intentado hacer que NLTK (Natural Language Toolkit) funcione en Google App Engine. Los pasos que seguí son:Uso de Python NLTK (2.0b5) en Google App Engine

  1. Descargue el instalador y ejecútelo (un archivo .dmg, ya que estoy usando una Mac).
  2. copie la carpeta nltk fuera del directorio python site-packages y colóquela como una subcarpeta en la carpeta de mi proyecto.
  3. Crear un módulo de Python en la carpeta que contiene la subcarpeta NLTK y agregue la línea: from nltk.tokenize import *

Por desgracia, después de lanzar que me sale este error (tenga en cuenta que este error se eleva en lo profundo de NLTK y yo 'm verlo por mi instalación del sistema de pitón en contraposición a la que se encuentra en la subcarpeta del proyecto 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__ 

Nota: esto es cómo se ve el error en los registros cuando se envían a GAE . Si lo ejecuto localmente obtengo el mismo error (excepto que parece originarse dentro de mi instancia de paquetes de sitio de NLTK ... así que no hay diferencia). Y "xxxx" significa el nombre del proyecto.

Así que en resumen:

  • es lo que estoy tratando de hacer posible? ¿Se ejecutará NLTK incluso en App Engine?
  • ¿Hay algo que eché de menos? Es decir: ¿copiar "nltk" al proyecto GAE no es suficiente?

EDIT: error tipográfico fijo y paso innecesario eliminado

+4

¿Alguna vez has llegado más lejos con esto? – dfrankow

+0

esta pregunta se vuelve demasiado obsoleta ahora; P – alvas

+0

He creado un PL con tres cambios simples que le permitirán trabajar en GAE. https://github.com/nltk/nltk/pull/933 –

Respuesta

4

El problema aquí es que nltk está tratando de hacer importaciones recursivas: Cuando se importa nltk/__init__.py, importa nltk/internals.py, que luego intenta importar nltk nuevo. Como nltk está en el medio de ser importado, falla con un error (bastante inútil).Lo que sea que estén haciendo es bastante extraño de todos modos, no es sorprendente algo como from nltk import __file__.

Parece un problema con nltk en sí mismo: ¿funciona cuando se importa directamente desde una consola de Python? Si es así, deben estar haciendo algún tipo de engaño en la versión instalada. Sugeriría preguntar en los grupos nltk qué están tramando y cómo solucionarlo.

+0

¡Sí! Todo parece reducirse a la importación extravagante de NLTK. Y sí, funciona bien en la consola. La solución debe implicar entrar en todas las referencias a "nltk" y corregirlas. Sin embargo, esto no es trivial porque también parece haber problemas relacionados con otros paquetes. Por lo tanto, preferiblemente: sería bueno tener una forma general de resolver todos los molestos problemas de importación. –

+0

Tal vez si le preguntas a las personas NLTK cuál es su intención con las extrañas importaciones recursivas, podemos encontrar la manera de hacerlo funcionar. –

3

NLTK, creo, no todo lo posible para ser puro en Python como punto de retorno (degradación elegante) cuando no se puede tener la C- extensiones codificadas del acelerador que le gustaría. Sin embargo, uno siempre tiene que moverse con extremo cuidado para inyectar audazmente un paquete tan rico (recursivamente comprimiendo todos los archivos .py y usar zipimport puede ser menos escamoso).

Mi NLTK instalado, 0.95 creo, no tiene ntlk.tokenizer - tiene nltk.tokenize, no R, pero obviamente incluso el error más diminuto es 100% intolerable cuando intentas decir una computadora exactamente lo que quiere, así que supongo que esto no es un error de su parte, sino el uso de una versión completamente diferente e incompatible de NLTK, entonces, ¿Qué versión de tiene un subpaquete llamado tokenizer en lugar de tokenize?

Si encuentra una política de cero tolerancia para los errores tipográficos uno-char difíciles de llevar, las computadoras y sus programas son poco probable que sea tolerable para usted ... ;-)

+0

Ah, vale, un error de mi parte. Pero este es un problema (que probablemente hubiera descubierto si no fuera por la posibilidad de importar * CUALQUIER * de NLTK) :-) Entonces, ¿por qué necesito usar zipimport? De hecho, no he tenido que ver esto con una biblioteca de Python. Gracias. –

+0

No NECESITA usar zipimport; es solo una conveniencia asegurarse de tener todos los archivos .py de un paquete en un único archivo .zip sin dejar nada o pasar por alto; ya que tiene límites para la cantidad de archivos & c que puede tener en una aplicación GAE, también es conveniente evitar esa limitación. Pero es solo una cuestión de claridad, ahorro de espacio y reducción de la flakiness, como mencioné, nada más. Creo que puedes usar NLTK en GAE (al menos todas las partes que pueden encontrar soluciones aceptables para la falta de módulos codificados con C ;-). Especifique las versiones exactas si desea ayuda. -) –

+0

2.0b5. Una vez más, veo el mismo error tanto en mi máquina local (que se ejecuta dentro del entorno GAE dev.) Como en Google App Engine. –

8

oakmad ha conseguido trabajar con éxito a través implementando VARIOS módulos NLTK a GAE. Espero que esto ayude. Pero, se honesto, todavía no creo que sea cierto incluso después de leer la publicación.

+0

Gracias por el enlace. Esto me dio algunos buenos consejos (aunque no creo que sea la solución * completa * al problema). –