2017-06-28 2 views
2

Ich entwickle eine chatbot (für Kik Messenger) mit Python und meine App zu Heroku vor kurzem umgezogen, so ziemlich wie in this question beschrieben. Außerdem habe ich NLTK (ein Python-Modul) und einige seiner Ressourcen wie in the Heroku documentation beschrieben. Bis zu diesem Punkt funktionieren die Dinge gut und die Chatbot-App antwortet im Kik Messenger.Wie benutzt man Stanford NLP Tools mit NLTK in Heroku?

Als nächster Schritt mag ich Werkzeuge von der Stanford NLP mit ihrer NLTK API enthalten. Die Stanford NLP-Tools werden zusammen mit mehreren Modelldateien als Java-Repository bereitgestellt. Vor Ort habe ich dies nach dem Einrichten der API nach this answer getan. Ich weiß nicht, wie ich das für Heroku machen soll. Heroku hat a documentation zum Bereitstellen von ausführbaren JAR-Dateien, aber ich sehe nicht, wie es auf mein Problem angewendet wird.

Die eigentliche Funktion I ist der Stanford-Parser verwenden möchten, die ich mit lokal aufrufen:

from nltk.parse.stanford import StanfordParser 
parser=StanfordParser(model_path="edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz") 

Das ist meine erste Frage ist SO auf, mich so lassen Sie es wissen, ob und wie ich diese Frage bearbeiten, so dass es einfacher wird zu antworten.

Bearbeiten: Auf einer allgemeineren Ebene habe ich eine Python-Anwendung, die ich auf dem Cloud-Dienst Heroku (mit ephemeren Dateisystem) ausführen und ein Java-Repository enthalten soll.

Antwort

0

Hier finden Sie die JAR-Dateien in der App enthalten müssen, indem sie bei der Erstellung herunterzuladen. Es klingt aus der Antwort, die Sie, dass im Zusammenhang mit Sie dies mit so etwas wie zu tun:

import nltk 
nltk.download() 

Sie werden auch die JVM buildpack zu Ihren App hinzufügen müssen:

$ heroku buildpacks:add heroku/jvm 
+0

Wie in [dieser Anser] (https://stackoverflow.com/a/34112695/561423) hingewiesen, ist das Herunterladen von Stanford NLP-Tools mit nltk.download() nicht mehr möglich - auch wenn es noch war, der Parser Das gezippte Quellverzeichnis allein ist ungefähr 390 MB groß und übertrifft damit die maximale Größe von Herokus. Aber ich könnte ein Repo erstellen, das sowohl den Python-Quellcode meiner App als auch den Java-Quellcode des Stanford-NLP-Tools enthält (mit einer reduzierten Modelldatei, damit es in einen Slug passt) und sowohl das JVM- als auch das Python-Buildpack ausführen. Muss ich die NLP-Tools in meine Procfile aufnehmen (vielleicht als Arbeiter?), Und wenn ja, wie? –

+0

Update: Ich habe einen Repo mit dem Quellcode der Python-App und des NLP-Parsers erstellt und die Größe der Modelldatei auf 150 MB reduziert, indem ich alle nicht-englischen Modelldateien gelöscht habe. Jetzt kann ich einen Slug mit beiden erstellen Python und das JVM-Buildpack. Beim Booten der App bekomme ich eine Fehlermeldung von NLTK, dass die Modelle nicht gefunden werden können, obwohl ich die CLASSPATH-Konfigurationsvariable auf "/app/stanford-parser.jar:/app/stanford-parser-3.7.0 gesetzt habe -models.jar "und checkte im Dyno-Terminal ein, ob Java aufgerufen werden konnte (mit" java -version "). Irgendwelche Ideen, bitte? :) –

0

In meinem Fall gearbeitet Löschen unnötiger Klassendateien in der Datei "model.jar". Verwenden Sie diesen Code im Stanford-Parser-Verzeichnis und machen Sie JAR-Datei weniger als 100 MB, die Grenze pro Push von Github ist.

jar tf stanford-parser-3.6.0-models.jar

und löschen Sie nicht benötigte Klassendateien mit diesem Befehl

zip -d stanford-parser-3.6.0-models.jar edu/stanford/path/to/file

und Ihre Dateien drücken, um auf Ihre App GitHub und bereitstellen.

Verwandte Themen