nltk.tree.Tree
์๋ chomsky_normal_form()
๊ธฐ๋ฅ์ด ์์ง๋ง ๋ฌธ๋ฒ์๋ ์์ต๋๋ค. CNF๋ ๋ฌธ๋ฒ ์ ํ ํํ์ด๊ธฐ ๋๋ฌธ์ ๋ํ ๊ทธ๋์ผ ํฉ๋๋ค.
NLTK์ chomsky_normal_form()
๋ ํธ๋ฆฌ ์ด์งํ ํจ์์
๋๋ค. ๋ฌธ๋ฒ์ ์ง์ ์ ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค( https://github.com/nltk/nltk/blob/develop/nltk/treetransforms.py ์ฐธ์กฐ).
CNF๋ก์ ๋ฌธ๋ฒ ๋ณํ์ ๋ค์ ๋ณต์กํ๋ฉฐ ์์ง ๊ตฌํ๋์ง ์์์ต๋๋ค. ๊ทธ๋ฐ ์๋๊ฐ ์์ผ๋ฉด ์ข๊ฒ ์ง๋ง ์ฌ์ํ์ง ์์ ์๋ ์์ต๋๋ค.
๋๊ตฐ๊ฐ ๊ธฐ์ฌ์ ๊ด์ฌ์ด ์๋ค๋ฉด ์์ํ๊ธฐ์ ์ข์ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๊ฑฐ ์ฐพ๋ค๊ฐ ์ฐ์ฐํ ๋ฐ๊ฒฌํ๋๋ฐ,
๋ด ํ๋ก์ ํธ ์ค ํ๋์ ๋ํด 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
์์ฑ์ด ๋ฉ๋๋ค.