๋๋ ์ด๋ฏธ ์ด์์ด stackoverflow ์์ด ์ง๋ฌธ์ํ๊ณ ์ฌ๊ธฐ์์ ๋ณต์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
nltk
์ ์ถ์ฒ ์ ๋ฐ๋ฅด๋ฉด tkinter (GUI)
๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ์ง ๋ง์ด ๊ทธ๋ํ๋ฅผ jupyter notebook
์ ์ธ๋ผ์ธํด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ anaconda3 ์ ๊ณต์ ๋์ปค ๋ด๋ถ์์ ๊ทธ๊ฒ์ ์๋ํ๊ณ ์์ต๋๋ค. ์ฆ, ์ฌ๊ธฐ์๋ ํ์
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()
์ถ์ :
๋์์ matplotlib ์ธ๋ผ์ธ ์์ฒด๊ฐ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค. ๊ทธ๋ํ ๋ ๋๋ง์ matplotlib๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ฐ์ฌ!
ํ์ธ ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1 ์ค์น Xvfb
,
2 ๋๋ฌด์ ์คํฌ๋ฆฐ ์ท ๋ง๋ค๊ธฐ
3 PS๋ฅผ PNG๋ก ๋ณํ
3 ์ธ๋ผ์ธ ๋ณํ ๋ ์คํฌ๋ฆฐ ์ท์ jupyter
๋ค์ ๋ณํ
ํ์ง๋ง ๋๋ก์๋ ๋๋ฌ์ด ํดํน์ฒ๋ผ ๋ณด์ ๋๋ค. ํธ๋ฆฌ๋ฅผ ๋ ๋๋งํ๋ ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ด ์์ด์ผํฉ๋๋ค.
ํ๋กฏ์ ๊ฒฝ์ฐ tkinter
์์ ๋ฒ์ด๋ ๊ทธ๋ํฝ ํ๋กํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค (์ : matplotlib
/ seaborn
.
tkinter์์ ๋ฒ์ด๋๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์๊ฐ์ด์ง๋ง ๋ ธํธ๋ถ์์ ํธ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ PNG๋ก ๋ ๋๋งํ๊ธฐ์ํ ์ง์์ด ์ด๋ฏธ ์์ต๋๋ค.
````
nltk ๊ฐ์ ธ ์ค๊ธฐ
IPython.display ๊ฐ์ ธ ์ค๊ธฐ ๋์คํ๋ ์ด์์
ํ์ = nltk.RegexpParser (r'NP : {<[NJ]. *> +} ')
ํธ๋ฆฌ = parser.parse (nltk.corpus.brown.tagged_sents () [0])
๋์คํ๋ ์ด (ํธ๋ฆฌ)
````
์ด๊ฒ์ ์๊ฒฉ Jupyter ๋
ธํธ๋ถ ์๋ฒ์์ ์๋ํ์ง ์์ต๋๋ค. ํธ๋ฆฌ์ _repr_png_()
์ tkinter ์ฐฝ์ ๋ง๋ค๊ณ ์ถ์ดํ๋ CanvasFrame()
ํธ์ถํฉ๋๋ค (์๊ฒฉ ์๋ฒ์๋ ํ์๋์ง ์์). ์ฌ๋ฐ๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
nltk = 3.2.4
ipython == 6.2.1
jupyter-core == 4.4.0
์ ์ก์!
๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๊ฐ์ ๋ฌธ์ ์ ๋ํด ์๋ก์ด ๋ฌธ์ (# 1887)๋ฅผ ์ด์์ต๋๋ค. ์ ์ฐจ๋ ํ์คํ์ง ์์ง๋ง ๋ณํฉ ํ ์ ์์ต๋๊น?
๋ช ๊ฐ์ง ์กฐ์ ํ ๋๋ฅผ ์ํด ์๋ํ๋ rmalouf ์๋ฃจ์ ์ ์ถ๊ฐํ์ญ์์ค.
๋งฅ
Jupyter
ํ์ด์ฌ 2.7
์ด ์์
์ํ๋ ค๋ฉด ghostscript๋ฅผ ์ค์นํด์ผํฉ๋๋ค : https://wiki.scribus.net/canvas/Installation_and_Configuration_of_Ghostscript
brew install ghostscript
xcrun์ผ๋ก ์ธํด ์คํจํ๋ ๊ฒฝ์ฐ : ์ค๋ฅ : ์๋ชป๋ ํ์ฑ ๊ฐ๋ฐ์ ๊ฒฝ๋ก
๊ทธ๋ฐ ๋ค์ ๋จผ์ ๋ค์์ ์ํํ์ญ์์ค.
http://mds.is/xcrun-error/ ์ฐธ์กฐ
xcode-select --install
์ ๋ ์ต๊ทผ์ Jupyter์์ Tree
์ png ๊ธฐ๋ฐ ์ฌํ์์ํ ๋๋กญ ์ธ ๋์ฒด๋ฌผ๋ก ์ฌ์ฉํ ์์๋ ์์ํ python => SVG ํธ๋ฆฌ ๋๋ก์ ํจํค์ง๋ฅผ ๋ชจ์์ต๋๋ค. NLTK๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค. python 3์ด ํ์ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์์ง ๋ฆด๋ฆฌ์ค์ฃผ๊ธฐ์ ์ด๊ธฐ ๋จ๊ณ์
๋๋ค (๋ถ๋ถ์ ์ผ๋ก๋์ด ์ฒญ์ค๊ณผ ๊ด๋ จ์ด์๋ ๋ค๋ฅธ ์์
์ ์ํํ๋ ๊ฒ์ ๋ชฉํ๋กํฉ๋๋ค). ๊ทธ๋ฌ๋์ด ์ค๋ ๋ (๋ฐ https://github.com/nltk/nltk/issues/1887)์์ ์ ๊ธฐ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์ ๋ฅผ ๊ดด๋กญ ํ์ต๋๋ค.
https://github.com/rawlins/svgling
(nb Jupyter์์ tkinter ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์์ ํ ํผํ๋ ค๋ฉด _repr_png_()
์์ Tree
_repr_png_()
๋ฅผ ์ ๊ฑฐํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด๋ Jupyter๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ _repr_*_
ํจ์๋ฅผ ์๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์ํฉ์์๋ ํ๋๋ง ํ์ํ๊ณ ๋ชจ๋ ์ถ๋ ฅ์ ๋
ธํธ๋ถ ํ์ผ์ ์ ์ฅํฉ๋๋ค.)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
tkinter์์ ๋ฒ์ด๋๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์ข์ ์๊ฐ์ด์ง๋ง ๋ ธํธ๋ถ์์ ํธ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ PNG๋ก ๋ ๋๋งํ๊ธฐ์ํ ์ง์์ด ์ด๋ฏธ ์์ต๋๋ค.
````
nltk ๊ฐ์ ธ ์ค๊ธฐ
IPython.display ๊ฐ์ ธ ์ค๊ธฐ ๋์คํ๋ ์ด์์
ํ์ = nltk.RegexpParser (r'NP : {<[NJ]. *> +} ')
ํธ๋ฆฌ = parser.parse (nltk.corpus.brown.tagged_sents () [0])
๋์คํ๋ ์ด (ํธ๋ฆฌ)
````