Nltk: Como eu poderia criar um gráfico nltk embutido no notebook Jupyter?

Criado em 3 jul. 2017  ·  7Comentários  ·  Fonte: nltk/nltk

Já fiz essa pergunta sobre stackoverflow sem sorte e decido duplicá-la aqui.

De acordo com as fontes de nltk ele desenha o gráfico por tkinter (GUI) mas eu preciso embutir este gráfico em jupyter notebook . E estou tentando fazer isso dentro do docker oficial do anaconda3, em outras palavras, não preciso de nenhuma GUI pop-up aqui, mas apenas uma imagem dentro do notebook, que deve ser renderizada no lado do servidor por nltk lib.

Como eu poderia superar isso por nltk? Talvez haja libs de terceiros que poderiam ajudar nisso?

As fontes de minha tentativa estão aqui - a última 18ª célula.

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:
ao mesmo tempo, matplotlib inline por si só funciona perfeitamente. Posso usar matplotlib para renderização de gráficos?

Obrigado!

bug corpus enhancement nice idea

Comentários muito úteis

Afastar-se do tkinter é uma boa ideia em geral, mas já existe suporte para renderizar árvores como PNGs em linha em notebooks:

`` ``
importar nltk
from IPython.display import display

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
árvore = parser.parse (nltk.corpus.brown.tagged_sents () [0])
exibição (árvore)
`` ``

Todos 7 comentários

ok, uma possível solução poderia ser:

1 instalando Xvfb ,
2 fazendo uma captura de tela da árvore e depois
3 convertendo ps para png
3 capturas de tela convertidas inlining de volta para jupyter

mas, para mim, parece mais um hack sujo. Deve haver uma maneira mais robusta de renderizar a árvore.

Acho que é uma boa ideia sair de tkinter para plotagens e passar para bibliotecas de plotagem nunca gráfica, por exemplo, matplotlib / seaborn .

Afastar-se do tkinter é uma boa ideia em geral, mas já existe suporte para renderizar árvores como PNGs em linha em notebooks:

`` ``
importar nltk
from IPython.display import display

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
árvore = parser.parse (nltk.corpus.brown.tagged_sents () [0])
exibição (árvore)
`` ``

Isso não funciona para mim em um servidor de notebook Jupyter remoto. A árvore _repr_png_() está chamando CanvasFrame() , que deseja criar uma janela tkinter (e não há exibição no servidor remoto). Não tenho certeza de qual é a solução alternativa certa.

image

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

Boa pegada!

Alguém acabou de abrir uma nova edição (# 1887) sobre a mesma coisa. Não tenho certeza sobre o procedimento, mas podemos mesclá-los?

Apenas para adicionar a solução rmalouf que funciona para mim após alguns ajustes:

Mac
Jupyter
Python 2.7

Você precisa ter o ghostscript instalado para que isso funcione: https://wiki.scribus.net/canvas/Installation_and_Configuration_of_Ghostscript
brew install ghostscript

Se falhar devido a xcrun: erro: caminho de desenvolvedor ativo inválido

Então faça o seguinte primeiro
consulte http://mds.is/xcrun-error/
xcode-select --install

Recentemente, criei um pacote de desenho de árvore puro python => SVG que pode ser usado como um substituto para o repr baseado em PNG Tree no Jupyter. Pode não ser apropriado para todos que usam NLTK, já que requer o python 3+, ainda está no início de seu ciclo de lançamento (e é parcialmente voltado para fazer um monte de outras coisas que talvez sejam menos relevantes para este público). Mas, ele resolve os problemas levantados neste tópico (e https://github.com/nltk/nltk/issues/1887), que também têm me atormentado:

https://github.com/rawlins/svgling

(se quiser evitar totalmente problemas relacionados ao tkinter no Jupyter, também pode ser necessário remover _repr_png_() de Tree . Isso ocorre porque o Jupyter tenta todas as funções _repr_*_ , mesmo embora ele exiba apenas um em circunstâncias normais e salve a saída de todos eles no arquivo do notebook.)

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

grayben picture grayben  ·  32Comentários

Kasran picture Kasran  ·  27Comentários

alvations picture alvations  ·  31Comentários

terencen picture terencen  ·  27Comentários

oxymor0n picture oxymor0n  ·  22Comentários