Nltk: ๋ฌธ๋ฒ•์„ ์œ„ํ•œ chomsky_normal_form()

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

nltk.tree.Tree ์—๋Š” chomsky_normal_form() ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ ๋ฌธ๋ฒ•์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. CNF๋Š” ๋ฌธ๋ฒ• ์˜ ํ•œ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋˜ํ•œ ๊ทธ๋ž˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

enhancement nice idea parsing

๋ชจ๋“  4 ๋Œ“๊ธ€

NLTK์˜ chomsky_normal_form() ๋Š” ํŠธ๋ฆฌ ์ด์ง„ํ™” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฌธ๋ฒ•์— ์ง์ ‘ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค( https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py ์ฐธ์กฐ).

CNF๋กœ์˜ ๋ฌธ๋ฒ• ๋ณ€ํ™˜์€ ๋‹ค์†Œ ๋ณต์žกํ•˜๋ฉฐ ์•„์ง ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹œ๋„๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ์‚ฌ์†Œํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๊ธฐ์—ฌ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์‹œ์ž‘ํ•˜๊ธฐ์— ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Lange์™€ LeiรŸ (2009). "CNF๋กœ ํ•  ๊ฒƒ์ธ๊ฐ€, CNF๋กœ ํ•  ๊ฒƒ์ธ๊ฐ€? CYK ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์ ์ด์ง€๋งŒ ์ œ์‹œ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „"

์ด๊ฑฐ ์ฐพ๋‹ค๊ฐ€ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ๋Š”๋ฐ,
๋‚ด ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•ด nltk ๋‚ด๋ถ€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค(null ์ฒ˜๋ฆฌ๋Š” ์—†์ง€๋งŒ ๊ทธ ์œ„์— CKY ํŒŒ์„œ๋„ ์žˆ์Œ). ์–ด์จŒ๋“  ๋งŽ์€ ๋ฌธ๋ฒ•(์˜ˆ: ATIS ํ…Œ์ŠคํŠธ ๋ฌธ๋ฒ•)์— ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ), PR์„ ๋ณด๋‚ด๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ์œ ํšจํ•˜๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ https://github.com/nltk/nltk/issues/1722์˜ ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€ ์ดํ›„).

๋˜ํ•œ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ํ•œ CYK ํŒŒ์„œ๊ฐ€ ์—†๋‹ค๋ฉด ๊ทธ์— ๋Œ€ํ•œ PR๋„ ๋ณด๋‚ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@virresh @alvations #1722๊ฐ€ ์˜ค๋ž˜๋˜์ง€ ์•Š๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์‚ถ์ด ๋ฐฉํ•ด๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@virresh ์ด๊ฒƒ์— ๋Œ€ํ•ด ๊ดด์งœ๋ฅผ ๋˜์‹ญ์‹œ์˜ค . ๋‚˜๋Š” ๋ช‡ ๋…„ ์ „์— CNF๋กœ์˜ ๋ณ€ํ™˜์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/aetilley/pcfg/blob/master/src/pcfg.py#L524

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ๊ณ„๋“ค์„ ์žฌ์ •๋ ฌํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์ง€๋งŒ ๋˜ํ•œ ๊ทธ๊ฒƒ๋“ค์ด ๋™๋“ฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์Šค์Šค๋กœ ํ™•์‹ ํ–ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์กฐ์‹ฌํ•ด์„œ ์ง„ํ–‰ํ•ด๋ผ.

๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค.

CFG์— ๋Œ€ํ•œ CNF์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋ณต์ œํ’ˆ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import nltk
grammar = nltk.data.load("grammars/large_grammars/atis.cfg")
grammar = grammar.chomsky_normal_form()
print(len(grammar.productions()))
print(len(list(set(grammar.productions()))))

๋ฌธ๋ฒ•์—๋Š” 20344 ์ƒ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ง‘ํ•ฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด 12396 ์ƒ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.

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