Nltk: ¿Cómo puedo incorporar un gráfico nltk a un portátil jupyter?

Creado en 3 jul. 2017  ·  7Comentarios  ·  Fuente: nltk/nltk

Ya hice esta pregunta en stackoverflow sin suerte y decido duplicarla aquí.

De acuerdo con las fuentes de nltk , dibuja un gráfico por tkinter (GUI) pero necesito alinear este gráfico a jupyter notebook . Y estoy tratando de hacerlo dentro de la ventana acoplable oficial de anaconda3, en otras palabras, no necesito ninguna GUI emergente aquí, sino solo una imagen dentro del cuaderno, que debería ser renderizada en el lado del servidor por nltk lib.

¿Cómo podría superar esto con nltk? ¿Quizás hay bibliotecas de terceros que podrían ayudar allí?

Las fuentes de mi intento están aquí : la última celda 18.

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()

PD:
al mismo tiempo, matplotlib en línea por sí solo funciona como un encanto. ¿Puedo usar matplotlib para renderizar gráficos?

¡Gracias!

bug corpus enhancement nice idea

Comentario más útil

Alejarse de tkinter es una buena idea en general, pero ya hay soporte para renderizar árboles como PNG en línea en cuadernos:

`` ``
importar nltk
desde la pantalla de importación IPython.display

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

Todos 7 comentarios

ok, una posible solución podría ser:

1 instalando Xvfb ,
2 haciendo captura de pantalla del árbol y luego
3 convertir ps a png
3 captura de pantalla convertida en línea de nuevo a jupyter

pero en cuanto a mí, parece más un truco sucio. Debería haber una forma más robusta de renderizar tree.

Creo que es una buena idea alejarse de tkinter para los gráficos y pasar a bibliotecas que nunca trazan gráficos, por ejemplo, matplotlib / seaborn .

Alejarse de tkinter es una buena idea en general, pero ya hay soporte para renderizar árboles como PNG en línea en cuadernos:

`` ``
importar nltk
desde la pantalla de importación IPython.display

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

Esto no funciona para mí en un servidor de notebook Jupyter remoto. El _repr_png_() del árbol está llamando a CanvasFrame() , que quiere crear una ventana tkinter (y no hay pantalla en el servidor remoto). No estoy seguro de cuál es la solución correcta.

image

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

¡Buena atrapada!

Alguien más acaba de abrir un nuevo número (# 1887) sobre lo mismo. No estoy seguro del procedimiento, pero ¿podemos fusionarlos?

Solo para agregar a la solución rmalouf que funciona para mí después de algunos ajustes:

Mac
Jupyter
Python 2.7

Necesita tener ghostscript instalado para que esto funcione: https://wiki.scribus.net/canvas/Installation_and_Configuration_of_Ghostscript
brew instalar ghostscript

Si esto falla debido a xcrun: error: ruta de desarrollador activa no válida

Entonces haz lo siguiente primero
ver http://mds.is/xcrun-error/
xcode-select --instalar

Recientemente he creado un paquete de dibujo de árbol python => SVG puro que se puede usar como reemplazo directo de la repr basada en png de Tree en Jupyter. Puede que no sea apropiado para todos los que usan NLTK, ya que requiere Python 3 +, todavía está bastante temprano en su ciclo de lanzamiento (y está destinado en parte a hacer un montón de otras cosas que quizás sean menos relevantes para esta audiencia). Pero, resuelve los problemas planteados en este hilo (y https://github.com/nltk/nltk/issues/1887), que también me han estado atormentando:

https://github.com/rawlins/svgling

(nb si desea evitar por completo los problemas relacionados con tkinter en Jupyter, es posible que también deba eliminar _repr_png_() de Tree . Esto se debe a que Jupyter prueba todas las funciones _repr_*_ incluso aunque solo muestra uno en circunstancias típicas y guarda la salida de todos ellos en el archivo del cuaderno).

¿Fue útil esta página
0 / 5 - 0 calificaciones