Nltk: Wie könnte ich nltk graph in jupyter notebook einbinden?

Erstellt am 3. Juli 2017  ·  7Kommentare  ·  Quelle: nltk/nltk

Ich habe diese Frage zum Stackoverflow bereits ohne Glück gestellt und beschließe, sie hier zu duplizieren.

Laut den Quellen von nltk wird das Diagramm um tkinter (GUI) aber ich muss dieses Diagramm auf jupyter notebook inline setzen. Und ich versuche , es in den offiziellen Docker von zu tun anaconda3 Ich brauche kein Pop - up mit anderen Worten GUI hier aber nur Bild im Innern des Notebooks, die auf Server - Seite von nltk lib machen sollten.

Wie könnte ich das mit nltk überwinden? Vielleicht gibt es Bibliotheken von Drittanbietern, die dort helfen könnten?

Quellen meines Versuchs sind hier - die letzte 18. Zelle.

chunkGram = r"""Chunk: {<RB.?>*<VB.?>*<NNP>+<NN>?}"""
chunkParser = nltk.RegexpParser(chunkGram)

for i in tokenized_text[:5]:
    words = nltk.word_tokenize(i)
    tagged = nltk.pos_tag(words)
    chunked = chunkParser.parse(tagged)
    chunked.draw()

PS:
Gleichzeitig wirkt matplotlib inline wie ein Zauber. Könnte ich matplotlib für das Rendern von Grafiken verwenden?

Vielen Dank!

bug corpus enhancement nice idea

Hilfreichster Kommentar

Die Abkehr von tkinter ist im Allgemeinen eine gute Idee, aber es gibt bereits Unterstützung für das Rendern von Bäumen als Inline-PNGs in Notebooks:

`` ``
importiere nltk
aus der IPython.display-Importanzeige

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
tree = parser.parse (nltk.corpus.brown.tagged_sents () [0])
Anzeige (Baum)
`` ``

Alle 7 Kommentare

ok mögliche umgehung könnte sein durch:

1 Installation von Xvfb ,
2 Screenshot von Baum machen und dann
3 ps in png umwandeln
3 Inlining konvertierter Screenshot zurück zu jupyter

aber für mich sieht es eher nach einem dreckigen Hack aus. Es sollte eine robustere Möglichkeit geben, einen Baum zu rendern.

Ich denke, es ist eine gute Idee, sich von tkinter für Plots zu entfernen und zu nie grafischen Plotbibliotheken überzugehen, z. B. matplotlib / seaborn .

Die Abkehr von tkinter ist im Allgemeinen eine gute Idee, aber es gibt bereits Unterstützung für das Rendern von Bäumen als Inline-PNGs in Notebooks:

`` ``
importiere nltk
aus der IPython.display-Importanzeige

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
tree = parser.parse (nltk.corpus.brown.tagged_sents () [0])
Anzeige (Baum)
`` ``

Dies funktioniert bei mir auf einem entfernten Jupyter-Notebook-Server nicht. Das _repr_png_() Baums ruft CanvasFrame() , das ein tkinter-Fenster erstellen möchte (und es gibt keine Anzeige auf dem Remote-Server). Ich bin mir nicht sicher, was die richtige Problemumgehung ist.

image

nltk = 3.2.4
ipython == 6.2.1
jupyter-core == 4.4.0

Guter Fang!

Jemand anderes hat gerade eine neue Ausgabe (Nr. 1887) über dasselbe geöffnet. Sie sind sich über das Verfahren nicht sicher, aber können wir sie zusammenführen?

Nur um die Rmalouf-Lösung zu ergänzen, die nach ein paar Änderungen für mich funktioniert:

Mac
Jupyter
Python 2.7

Damit dies funktioniert, muss Ghostscript installiert sein: https://wiki.scribus.net/canvas/Installation_and_Configuration_of_Ghostscript
Brew installieren Ghostscript

Wenn dies aufgrund von xcrun fehlschlägt: Fehler: Ungültiger aktiver Entwicklerpfad

Führen Sie dann zuerst die folgenden Schritte aus
siehe http://mds.is/xcrun-error/
xcode-select --install

Ich habe kürzlich ein reines Python => SVG-Baumzeichnungspaket zusammengestellt, das als Drop-In-Ersatz für Tree 's png-basierten Repr in Jupyter verwendet werden kann. Es ist möglicherweise nicht für alle geeignet, die NLTK verwenden, da es Python 3 + benötigt. Es befindet sich noch ziemlich früh in seinem Veröffentlichungszyklus (und es zielt teilweise darauf ab, eine Reihe anderer Dinge zu tun, die für dieses Publikum möglicherweise weniger relevant sind). Aber es löst die Probleme, die in diesem Thread (und https://github.com/nltk/nltk/issues/1887) aufgeworfen wurden und die mich auch geplagt haben:

https://github.com/rawlins/svgling

(nb Wenn Sie tkinter-bezogene Probleme in Jupyter vollständig vermeiden möchten, müssen Sie möglicherweise auch _repr_png_() aus Tree entfernen. Dies liegt daran, dass Jupyter alle verfügbaren _repr_*_ -Funktionen sogar ausprobiert obwohl es unter typischen Umständen nur eine anzeigt und die Ausgabe aller in der Notebook-Datei speichert.)

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen