2009-08-17 5 views
17

Ich habe versucht, das NLTK (Natural Language Toolkit) auf der Google App Engine arbeiten zu lassen. Die folgenden Schritte sind:Verwenden von Python NLTK (2.0b5) auf der Google App Engine

  1. Laden Sie das Installationsprogramm herunter und führen Sie es aus (eine .dmg-Datei, da ich einen Mac verwende).
  2. kopieren Sie den Nltk-Ordner aus dem Verzeichnis python site-packages und platzieren Sie ihn als Unterordner in meinem Projektordner.
  3. ein Python-Modul in dem Ordner erstellen, der die nltk Unterordner enthält und fügen Sie die Zeile: from nltk.tokenize import *

Leider, nachdem es gestartet ich diesen Fehler (beachten Sie, dass dieser Fehler tief in NLTK und ich angehoben ist es für mein System Installation von python zu sehen, wie auf den einen gegenüber, die im Unterverzeichnis des GAE Projektes ist):

<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__ 

Hinweis: dies ist, wie der Fehler in den Protokollen aussieht, wenn auf GAE hochgeladen . Wenn ich es lokal ausführe, bekomme ich den gleichen Fehler (außer es scheint in meiner Site-Packages-Instanz von NLTK zu entstehen ... also kein Unterschied dort). Und "xxxx" bezeichnet den Projektnamen.

Also zusammenfassend:

  • Ist das, was ich überhaupt möglich machen möchte? Wird NLTK sogar auf der App Engine laufen?
  • Gibt es etwas, das ich vermisst habe? Das heißt: Kopieren von "nltk" in das GAE-Projekt ist nicht genug?

EDIT: Festtippfehler und entfernt unnötige Schritt

+4

Sind Sie jemals weiter gekommen? – dfrankow

+0

Diese Frage wird irgendwie zu veraltet jetzt; P – alvas

+0

Ich habe eine PL mit drei einfachen Änderungen erstellt, die es ermöglichen, auf GAE zu arbeiten. https://github.com/nltk/nltk/pull/933 –

Antwort

4

Das Problem hierbei ist, dass nltk rekursiven Importen zu tun versucht: Wenn nltk/__init__.py importiert wird, importiert es nltk/internals.py, die dann nltk wieder zu importieren versucht. Da nltk gerade importiert wird, scheitert es mit einem (eher nicht hilfreichen) Fehler.Was auch immer sie tun, ist sowieso ziemlich seltsam - es ist nicht überraschend, dass etwas wie from nltk import __file__ bricht.

Das sieht wie ein Problem mit Nltk selbst aus - funktioniert es, wenn es direkt von einer Python-Konsole importiert wird? Wenn ja, müssen sie in der installierten Version eine Art Trickserei machen. Ich würde vorschlagen, in den Nltk-Gruppen zu fragen, was sie vorhaben und wie man damit umgehen kann.

+0

Ja! Alles scheint auf den verrückten Import von NLTK zurückzuführen zu sein. Und ja, es funktioniert gut auf der Konsole. Die Lösung muss darin bestehen, alle Verweise auf "nltk" einzubeziehen und zu korrigieren. Dies ist jedoch nicht trivial, da es auch Probleme gibt, die sich auf andere Pakete beziehen. Also, vorzugsweise: Es wäre schön, einen allgemeinen Weg zu haben, all die lästigen Importprobleme zu lösen. –

+0

Vielleicht, wenn Sie die NLTK Leute fragen, was ihre Absicht mit den seltsamen rekursiven Importen ist, können wir einen Weg finden, es zum Funktionieren zu bringen. –

3

NLTK, glaube ich, seine besten nicht versuchen rein Python als Ausweich (Graceful Degradation) zu sein, wenn es nicht die C- haben kann codierte Beschleuniger-Erweiterungen, die es gerne hätte. Man muss jedoch immer mit äußerster Sorgfalt vorgehen, um ein fettes Paket zu erstellen (rekursiv alle .py-Dateien zu komprimieren und zipimport zu verwenden, ist möglicherweise weniger flockig).

Meine installierte NLTK, 0,95 Ich glaube, hat keine ntlk.tokenizer - es hat eine ntk.tokenize, keine nachlaufende R, aber offensichtlich ist auch der kleinste solche Tippfehler 100% unerträglich, wenn Sie versuchen zu erzählen ein Computer genau das, was Sie wollen, also nehme ich an, das ist kein Tippfehler Ihrerseits, sondern Ihre Verwendung einer völlig anderen und inkompatiblen Version von NLTK, also WAS ist die Freigabe, die ein Unterpaket mit dem Namen Tokenizer statt Tokenize hat?

Wenn Sie eine Null-Toleranz-Politik für ein Zeichen Fehler schwer zu ertragen finden, Computer und deren Programmierung unwahrscheinlich sind Sie erträglich sein ... ;-)

+0

Ah, ok, ein Fehler meinerseits. Aber das ist ein Red-Hering (was ich wahrscheinlich entdeckt hätte, wenn ich * ANY * von NLTK nicht hätte importieren können) :-) Also, warum brauche ich zipimport? Ich habe damit vorher noch nie mit einer Python-Bibliothek zu tun gehabt. Vielen Dank. –

+0

Sie müssen ZIPIMPORT nicht verwenden - es ist nur eine Annehmlichkeit, um sicherzustellen, dass Sie alle .py-Dateien aus einem Paket in einer einzigen ZIP-Datei haben und nichts zurückgelassen oder übersehen wird; Da die Anzahl der Dateien, die Sie in einer GAE-App haben können, begrenzt ist, können Sie diese Einschränkung ebenfalls vermeiden. Aber es ist nur eine Frage der Klarheit, des Platzsparens und der Reduzierung von Blätterteig, wie ich bereits erwähnt habe, nicht mehr. Ich glaube, dass Sie NLTK auf GAE verwenden können (zumindest alle Teile, die wegen fehlender C-codierter Module akzeptable Problemumgehungen finden können ;-). Geben Sie genaue Versionen an, wenn Sie Hilfe benötigen! -) –

+0

2.0b5. Auf meinem lokalen Computer (der in der GAE-Entwicklungsumgebung ausgeführt wird) erscheint erneut der gleiche Fehler wie bei Google App Engine. –

8

oakmad hat es geschafft, erfolgreich durch zu arbeiten Bereitstellung mehrere NLTK-Module zu GAE. Hoffe das hilft. Aber, aber ehrlich gesagt, ich glaube immer noch nicht, dass es auch nach dem Lesen der Post wahr ist.

+0

Danke für den Link. Dies gab mir einige gute Hinweise (obwohl ich nicht glaube, dass es die * vollständige * Lösung des Problems ist). –

Verwandte Themen