Nltk: nltk ๊ทธ๋ž˜ํ”„๋ฅผ jupyter ๋…ธํŠธ๋ถ์— ์–ด๋–ป๊ฒŒ ์ธ๋ผ์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 07์›” 03์ผ  ยท  7์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: nltk/nltk

๋‚˜๋Š” ์ด๋ฏธ ์šด์—†์ด 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๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ!

bug corpus enhancement nice idea

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

tkinter์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์€ ์ƒ๊ฐ์ด์ง€๋งŒ ๋…ธํŠธ๋ถ์—์„œ ํŠธ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ PNG๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ์œ„ํ•œ ์ง€์›์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

````
nltk ๊ฐ€์ ธ ์˜ค๊ธฐ
IPython.display ๊ฐ€์ ธ ์˜ค๊ธฐ ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ

ํŒŒ์„œ = nltk.RegexpParser (r'NP : {<[NJ]. *> +} ')
ํŠธ๋ฆฌ = 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 ๊ฐ€์ ธ ์˜ค๊ธฐ ๋””์Šคํ”Œ๋ ˆ์ด์—์„œ

ํŒŒ์„œ = nltk.RegexpParser (r'NP : {<[NJ]. *> +} ')
ํŠธ๋ฆฌ = parser.parse (nltk.corpus.brown.tagged_sents () [0])
๋””์Šคํ”Œ๋ ˆ์ด (ํŠธ๋ฆฌ)
````

์ด๊ฒƒ์€ ์›๊ฒฉ Jupyter ๋…ธํŠธ๋ถ ์„œ๋ฒ„์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠธ๋ฆฌ์˜ _repr_png_() ์€ tkinter ์ฐฝ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์–ดํ•˜๋Š” CanvasFrame() ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค (์›๊ฒฉ ์„œ๋ฒ„์—๋Š” ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ). ์˜ฌ๋ฐ”๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

image

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_*_ ํ•จ์ˆ˜๋ฅผ ์‹œ๋„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ๋Š” ํ•˜๋‚˜๋งŒ ํ‘œ์‹œํ•˜๊ณ  ๋ชจ๋“  ์ถœ๋ ฅ์„ ๋…ธํŠธ๋ถ ํŒŒ์ผ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰