私はすでにスタックオーバーフローについてこの質問をしましたが、運が悪かったので、ここで複製することにしました。
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を使用できますか?
ありがとう!
考えられる回避策は次のとおりです。
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ウィンドウを作成しようとしています(リモートサーバーには表示されません)。 正しい回避策が何であるかはよくわかりません。
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つしか表示されず、すべての出力がノートブックファイルに保存されます。)
最も参考になるコメント
一般に、tkinterから離れることは良い考えですが、ノートブックでツリーをインラインPNGとしてレンダリングすることはすでにサポートされています。
「」
nltkをインポート
IPython.displayからインポートディスプレイ
パーサー= nltk.RegexpParser(r'NP:{<[NJ]。*> +} ')
tree = parser.parse(nltk.corpus.brown.tagged_sents()[0])
display(tree)
「」