Nltk: nltkグラフをjupyterノートブックにインライン化するにはどうすればよいですか?

作成日 2017年07月03日  ·  7コメント  ·  ソース: nltk/nltk

私はすでにスタックオーバーフローについてこの質問をしましたが、運が悪かったので、ここで複製することにしました。

nltkのソースによるとtkinter (GUI)で描画されますが、このグラフをjupyter notebookにインライン化する必要があります。 そして、 anaconda3の公式Docker内でそれを実行しようとしています。つまり、ここではポップアップGUIは必要ありませんが、ノートブック内の画像のみが必要です。これは、nltklibによってサーバー側でレンダリングされる必要があります。

nltkでこれをどのように克服できますか? たぶんそこで役立つサードパーティのライブラリがありますか?

私の試みの源はここにあり

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:
同時に、matplotlibインライン自体が魅力のように機能します。 グラフのレンダリングにmatplotlibを使用できますか?

ありがとう!

bug corpus enhancement nice idea

最も参考になるコメント

一般に、tkinterから離れることは良い考えですが、ノートブックでツリーをインラインPNGとしてレンダリングすることはすでにサポートされています。

「」
nltkをインポート
IPython.displayからインポートディスプレイ

パーサー= nltk.RegexpParser(r'NP:{<[NJ]。*> +} ')
tree = parser.parse(nltk.corpus.brown.tagged_sents()[0])
display(tree)
「」

全てのコメント7件

考えられる回避策は次のとおりです。

1 Xvfbインストールします。
2ツリーのスクリーンショットを作成する
3psをpngに変換
3インライン変換されたスクリーンショットをjupyter戻します

しかし、私にとっては、それは汚いハックのように見えます。 ツリーをレンダリングするためのより堅牢な方法があるはずです。

プロットのtkinterから離れて、グラフィックプロットライブラリ( matplotlib / seabornなど)に移行することをお勧めします。

一般に、tkinterから離れることは良い考えですが、ノートブックでツリーをインラインPNGとしてレンダリングすることはすでにサポートされています。

「」
nltkをインポート
IPython.displayからインポートディスプレイ

パーサー= nltk.RegexpParser(r'NP:{<[NJ]。*> +} ')
tree = parser.parse(nltk.corpus.brown.tagged_sents()[0])
display(tree)
「」

これは、リモートのJupyterノートブックサーバーでは機能しません。 ツリーの_repr_png_()CanvasFrame()呼び出しており、tkinterウィンドウを作成しようとしています(リモートサーバーには表示されません)。 正しい回避策が何であるかはよくわかりません。

image

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

いいキャッチ!

他の誰かが同じことについて新しい問題(#1887)を開いたところです。 手順についてはわかりませんが、マージできますか?

いくつかの調整の後で私のために働くrmaloufソリューションに追加するだけです:

マック
Jupyter
Python 2.7

これを機能させるには、ghostscriptをインストールする必要があります: https
brew install ghostscript

xcrunが原因でこれが失敗した場合:エラー:無効なアクティブな開発者パス

次に、最初に次のことを行います
http://mds.is/xcrun-error/を参照して
xcode-select --install

私は最近、JupyterでTreeのpngベースのreprのドロップイン置換として使用できる純粋なpython => SVGツリー描画パッケージをまとめました。 NLTKを使用するすべての人に適しているとは限りません。Python3が必要であり、リリースサイクルのかなり早い段階です(また、このオーディエンスとはあまり関係のない他の多くのことを行うことを目的としています)。 しかし、それは私を悩ませてきたこのスレッド(およびhttps://github.com/nltk/nltk/issues/1887)で提起された問題を解決します:

https://github.com/rawlins/svgling

(nb Jupyterでtkinter関連の問題を完全に回避したい場合は、 Treeから_repr_png_()を削除する必要があるかもしれません。これは、Jupyterが利用可能なすべての_repr_*_関数を試行するためです。ただし、通常の状況では1つしか表示されず、すべての出力がノートブックファイルに保存されます。)

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

alvations picture alvations  ·  4コメント

goodmami picture goodmami  ·  4コメント

stevenbird picture stevenbird  ·  3コメント

Chris00 picture Chris00  ·  3コメント

BLKSerene picture BLKSerene  ·  4コメント