我已经在stackoverflow上问了这个问题,没有任何运气,因此决定在这里重复。
根据nltk
的来源,它通过tkinter (GUI)
绘制图形,但是我需要将此图形内联到jupyter notebook
。 我正在尝试从anaconda3在官方docker内部进行操作,换句话说,我在这里不需要任何弹出GUI,而只需在笔记本内部放置图像,应该在服务器端由nltk lib呈现。
我怎么能通过nltk克服这个问题? 也许有第三方库可以帮助那里?
我尝试的来源在这里-最后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()
PS:
同时,matplotlib内联本身的作用就像一个魅力。 我可以使用matplotlib进行图形渲染吗?
谢谢!
好的可能的解决方法是:
1安装Xvfb
,
2制作树和屏幕截图
3将ps转换为png
3将转换后的屏幕截图内联回到jupyter
但对我来说,它更像是一个肮脏的hack。 应该有一些更健壮的方法来渲染树。
我认为,最好从tkinter
转移到绘图区,然后转向从不使用图形绘图库,例如matplotlib
/ seaborn
。
通常,远离tkinter是个好主意,但是已经支持在笔记本中将树渲染为嵌入式PNG:
``
导入NLTK
从IPython.display导入显示
解析器= nltk.RegexpParser(r'NP:{<[NJ]。*> +}')
树= parser.parse(nltk.corpus.brown.tagged_sents()[0])
显示(树)
``
在远程Jupyter笔记本服务器上,这对我不起作用。 树的_repr_png_()
正在调用CanvasFrame()
,它想要创建一个tkinter窗口(并且在远程服务器上没有显示)。 不太确定正确的解决方法是什么。
nltk = 3.2.4
ipython == 6.2.1
jupyter-核心== 4.4.0
接得好!
其他人刚刚就同一件事打开了一个新期刊(#1887)。 不确定过程,但是我们可以合并它们吗?
经过几次调整后,我想添加到对我有用的rmalouf解决方案中:
苹果
朱皮特
Python 2.7
您需要安装ghostscript才能起作用: https :
酿造安装ghostscript
如果此操作由于xcrun而失败:错误:无效的活动开发人员路径
然后先执行以下操作
参见http://mds.is/xcrun-error/
xcode-select-安装
我最近整理了一个纯python => SVG树形绘图包,可以将其用作Jupyter中Tree
基于png的repr的直接替代品。 它可能并不适合所有使用NLTK的人,因为它需要python 3 +,但仍处于发布周期的早期(并且部分目的是做一些与该受众不太相关的其他事情)。 但是,它解决了该线程(和https://github.com/nltk/nltk/issues/1887)中提出的问题,这些问题也困扰着我:
https://github.com/rawlins/svgling
(nb如果您想完全避免Jupyter中与tkinter相关的问题,您可能还需要从Tree
删除_repr_png_()
Tree
。这是因为Jupyter甚至会尝试所有可用的_repr_*_
函数(虽然在典型情况下它仅显示一个,并将所有输出保存在笔记本文件中。)
最有用的评论
通常,远离tkinter是个好主意,但是已经支持在笔记本中将树渲染为嵌入式PNG:
``
导入NLTK
从IPython.display导入显示
解析器= nltk.RegexpParser(r'NP:{<[NJ]。*> +}')
树= parser.parse(nltk.corpus.brown.tagged_sents()[0])
显示(树)
``