Nltk: Как я могу встроить график nltk в блокнот jupyter?

Созданный на 3 июл. 2017  ·  7Комментарии  ·  Источник: nltk/nltk

Я уже безуспешно задавал этот вопрос о stackoverflow и решил продублировать его здесь.

Согласно источникам nltk он рисует график по tkinter (GUI) но мне нужно встроить этот график в jupyter notebook . И я пытаюсь сделать это внутри официального докера от anaconda3, другими словами, мне здесь не нужен всплывающий графический интерфейс, а просто изображение внутри записной книжки, которое должно отображаться на стороне сервера с помощью 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 для рендеринга графиков?

Спасибо!

bug corpus enhancement nice idea

Самый полезный комментарий

Отказ от tkinter в целом - хорошая идея, но уже есть поддержка рендеринга деревьев как встроенных PNG в записных книжках:

`` ''
импортировать nltk
из IPython.display import display

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
tree = parser.parse (nltk.corpus.brown.tagged_sents () [0])
дисплей (дерево)
`` ''

Все 7 Комментарий

хорошо, возможная работа может быть:

1 установка Xvfb ,
2 делаем скриншот дерева и потом
3 преобразование ps в png
3 встраивание преобразованного скриншота обратно в jupyter

но как по мне это больше похоже на грязный хак. Должен быть более надежный способ визуализации дерева.

Я думаю, это хорошая идея отойти от tkinter для графиков и перейти к библиотекам, никогда не использующим графические построения, например, matplotlib / seaborn .

Отказ от tkinter в целом - хорошая идея, но уже есть поддержка рендеринга деревьев как встроенных PNG в записных книжках:

`` ''
импортировать nltk
из IPython.display import display

parser = nltk.RegexpParser (r'NP: {<[NJ]. *> +} ')
tree = parser.parse (nltk.corpus.brown.tagged_sents () [0])
дисплей (дерево)
`` ''

У меня это не работает на удаленном сервере ноутбуков Jupyter. _repr_png_() дерева вызывает CanvasFrame() , который хочет создать окно tkinter (и на удаленном сервере нет отображения). Не совсем уверен, каков правильный обходной путь.

image

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

Хороший улов!

Кто-то другой только что открыл новый выпуск (№ 1887) о том же. Не уверен в процедуре, но можем ли мы их объединить?

Просто чтобы добавить к решению rmalouf, которое у меня работает после нескольких настроек:

Mac
Юпитер
Python 2.7

Чтобы это работало, у вас должен быть установлен ghostscript: https://wiki.scribus.net/canvas/Installation_and_Configuration_of_Ghostscript
варить установить ghostscript

Если это не удается из-за xcrun: error: неверный путь активного разработчика

Затем сначала сделайте следующее
см. http://mds.is/xcrun-error/
xcode-select - установить

Недавно я собрал чистый пакет для рисования дерева python => SVG, который можно использовать как заменяющую замену Tree репру на основе png в Jupyter. Это может не подходить для всех, кто использует NLTK, поскольку для него требуется Python 3+, он все еще находится на довольно ранней стадии цикла выпуска (и частично нацелен на выполнение множества других вещей, которые, возможно, менее актуальны для этой аудитории). Но он решает проблемы, поднятые в этой ветке (и https://github.com/nltk/nltk/issues/1887), которые также меня мучили:

https://github.com/rawlins/svgling

(nb, если вы хотите полностью избежать проблем, связанных с tkinter в Jupyter, вам также может потребоваться удалить _repr_png_() из Tree . Это потому, что Jupyter пробует все доступные _repr_*_ функции, даже хотя он отображает только один в типичных обстоятельствах и сохраняет вывод всех в файле записной книжки.)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

DavidNemeskey picture DavidNemeskey  ·  4Комментарии

vezeli picture vezeli  ·  3Комментарии

chaseireland picture chaseireland  ·  3Комментарии

stevenbird picture stevenbird  ·  3Комментарии

jeryini picture jeryini  ·  5Комментарии