sejong-corpus
๊ตญ๋ฆฝ๊ตญ์ด์ ์ธ์ข ๋ง๋ญ์น๋ฅผ ๋ค์ด๋ก๋ํ๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
๋ณธ ์คํฌ๋ฆฝํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ ์๋์์ต๋๋ค.
- ์ธ์ข ๋ง๋ญ์น ๊ด๋ จ ํ์ผ๋ค์ด 1400๊ฐ๊ฐ ๋์ต๋๋ค. ๋ํ ์ ์ฒด ํฌ๊ธฐ๋ 2GB์ ํด๋นํฉ๋๋ค.
- ๊ฒ์ํ์ ํตํด ํ๋์ฉ ๋ฐ๋๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค.
- ๋ง๋ญ์น์ ์ฌ์ํ ์ค๋ฅ๋ค์ด ์์ต๋๋ค. ๋ํ, ์ธ์ข ๋ง๋ญ์น๋ ๊ฐ์ ๋ฐ ์ฌ๋ฐฐํฌ๋ฅผ ํ์ฉํ์ง ์๋ ๋ผ์ด์ผ์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์, ์ฐ๊ตฌ์๋ค์ด ๋ง๋ญ์น๋ฅผ ๋ฐ์ ์ค๋ฅ๋ฅผ ๊ณ ์ณ๋ ์ฌ๋ฐฐํฌ๊ฐ ํ์ฉ๋์ง ์์ต๋๋ค.
๋ง๋ญ์น ํ์ผ์ ๋ฐ์ ๋ ํญ์ ๋ณด์ด๋, ์๋ฃ์ ๋ํ ๋ผ์ด์ผ์ค๊ฐ ์์ต๋๋ค. ๋ณธ ์คํฌ๋ฆฝํธ๋ ๊ทธ ๋ผ์ด์ผ์ค ๋ ธ์ถ์ ์ฐํํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ฏ๋ก, ์ฌ์ฉ์๋ ํด๋น ๋ผ์ด์ผ์ค๋ฅผ ์ฝ๊ณ ๋์ํ๋ค๋ ๊ฒ์ ๊ฐ์ ํฉ๋๋ค. ๋ค์ด๋ก๋ ์ ๋์ํด์ผ ํ๋ ๋ผ์ด์ผ์ค์ ์ฌ๋ณธ์ LICENSE.txt ์ ๋๋ค.
์ฌ์ฉ๋ฒ
๋์คํฌ์ ์ต์ํ 5GB๋ ์์ด์ผํฉ๋๋ค.
๋ค์ด๋ก๋ ๋ฐ UTF-8์ผ๋ก ๋ณํ
$ make
๊ฒ์ํ์ ๊ฒ์๋ฌผ ๋ชฉ๋ก์ ์ถ์ถํ๊ณ , ๊ฐ ๊ฒ์๋ฌผ์์ ์ฒจ๋ถํ์ผ์ ๋ฐ๋ ๊ณผ์ ์ ๋๋ค. ์ด ๋ค ๋จ๊ณ๋ฅผ ์๋์งํ ํฉ๋๋ค.
STEP 0
์ด ๋จ๊ณ์์๋ ํ์ํ ํด์ ์กด์ฌ๋ฅผ ํ์ธํฉ๋๋ค. ์๋ ๊ฒฝ์ฐ ์ ๋นํ๊ฒ ์ค์น๋ฅผ ์ ๋ํฉ๋๋ค. ๋ง์ฝ ๋ณธ ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋์ง ์๋ ํ๊ฒฝ์์๋ผ๋ฉด ์์ค(00.prepare.sh) ๋ฅผ ๋ณด์๊ณ ํ์ํ ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ค์นํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
STEP 1
์ด ๋จ๊ณ๋ ๊ฒ์๋ฌผ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋ ๋จ๊ณ์ ๋๋ค.
STEP 2
์ด ๋จ๊ณ๋ ๊ฐ ๊ฒ์๋ฌผ์ ์ฒจ๋ถํ์ผ์ ๋ค์ด๋ก๋ํฉ๋๋ค.
STEP 3
์ด ๋จ๊ณ๋ ์ฒจ๋ถํ์ผ์ ํ์(UTF16)์ UTF8์ผ๋ก ๋ฐ๊ฟ๋๋ค. ๋ํ, ์ฐ๊ตฌ์์ ์์์ ํจ์น๋ฅผ ๊ฐํ๋ ๋จ๊ณ์ ๋๋ค.
ํํ์๋ณ ์ฌ์ ๋ง๋ค๊ธฐ
$ make dic
๋ง๋ญ์น๊ฐ ์ค๋น๋์์ผ๋ฉด (corpus-utf8 ๋๋ ํ ๋ฆฌ์) ํด๋น ๋ง๋ญ์น๋ก๋ถํฐ ํํ์ ๋ถ์ ๊ฒฐ๊ณผ๋ง์ ์ถ์ถํ๊ณ ์ถ์ถ๋ ํํ์ ๋ฐ ํ๊น ๋ ํ์ฌ๋ก๋ถํฐ ์ญ์ผ๋ก dictionary ๋๋ ํ ๋ฆฌ์ ์ฌ์ ์ ๊ตฌ์ถํ๋ ๋จ๊ณ์ ๋๋ค. ์๋์ผ๋ก ์ธ ๋จ๊ณ๋ฅผ ์งํํฉ๋๋ค.
STEP 4
์ด ๋จ๊ณ๋ ๊ฐ ํ์ผ ์ค ํํ์ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ํฌํจํ ํ์ผ์์ ์ ํ์ ๋ฐ๋ผ ํ์ผ์ ํํ์ ๋ฐ ํ์ฌ ๋ถ๋ถ์ ์ถ์ถํฉ๋๋ค. ์ถ์ถ๋ ํ์ผ๋ค์ ์ต์ข ํตํฉ๋์ด ํ๋์ ํ์ผ์ ๋ง๋ญ๋๋ค.
STEP 5
ํตํฉ๋ ๊ฑฐ๋ ํ์ผ์ ์ ๋ ฌํ ๋ค ์ธ์ ํ ์ค๋ณตํ์ ์ ๊ฑฐํ๋ ๋ฐฉ์์ผ๋ก ์ ์ผํ ํ์ ์ด๋ฅผ ์ถ์ถํ๋ ๋จ๊ณ์ ๋๋ค.
STEP 6
์ ์ผํ ํ์ ์ด ์งํฉ์ ๋ง๋ ๋ค์ ๊ฐ ํ์ฌ๋ณ๋ก ์ชผ๊ฐ์ด ํ์ฌ(POS)๋ณ๋ก ๋๋์ด ์ ์ฅํฉ๋๋ค
์์
corpus/*.txt ํ์ผ์ UTF18 ์๋ณธ์ด๋ฏ๋ก ์์ ํ์ง ์์ต๋๋ค. ๋ง๋ญ์น์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ corpus-utf8/*.txt ํ์ผ์ ์ง์ ์์ ํฉ๋๋ค.
make diff
์ ๋ช ๋ น์ ์ํํ๋ฉด corpus-utf8.orig ์ ๋ค์ ํ๋ฒ ์๋ณธ ํ์ผ์ ๋ณต์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ์๊ฐ ์์ ํ ํ์ผ์ด ์๋ corpus-utf8 ๋๋ ํ ๋ฆฌ์ ํ์ผ๋ค๊ณผ ๋น๊ตํ์ฌ ๋ฐ๋ ํ์ผ๋ค์ ์ฐจ์ด๋ง์ patches ๋๋ ํ ๋ฆฌ์ ์ ์ฅํฉ๋๋ค.
๋ง์ฝ patches/*.patch ํ์ผ์ ์๋์ผ๋ก corpus-utf8 ํ์ผ๋ค์ patch ํ๊ณ ์ถ๋ค๋ฉด
$ cat patches/* | patch -N -d corpus-utf8 -p1
์์ ๊ฐ์ด ํฉ๋๋ค. -N ์ต์ ์ด ์์ผ๋ฏ๋ก ์ด๋ฏธ ์ ์ฉ๋ ํจ์น๋ ๋ฌด์ํ๋ฏ๋ก ์ฌ๋ฌ๋ฒ ์คํํ์ฌ๋ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์งํฉ๋๋ค.
์ฐ์ถ๋ฌผ
- logs/list.idx : ๊ตญ๋ฆฝ๊ตญ์ด์ ์ธ์ด์ ๋ณด๋๋ํฐ ๊ฒ์ํ ๊ธ ๋ฒํธ
- html/* :๊ฒ์ํ ์๋ฌธ
- download/* :๊ฒ์ํ ์ฒจ๋ถํ์ผ
- corpus/* :์ฒจ๋ถํ์ผ์์ ๋ง๋ญ์น ์ถ์ถ
- corpus-utf8/* :๋ง๋ญ์น๋ฅผ UTF8์ผ๋ก ๋ณํ
- corpus-utf8.orig/* :๋ง๋ญ์น๋ฅผ UTF8์ผ๋ก ๋ณํํ ์๋ณธ (make diff ์ค ์๊น)
- logs/download.log: ์ฒจ๋ถํ์ผ ๋ค์ด๋ก๋ ๊ธฐ๋ก
- logs/words.dic: ๋จ์ด/ํ์ฌ๋ถ์ ์ถ์ถ ์๋ณธ
- logs/words-uniq.dic: ๋จ์ด/ํ์ฌ์ ์ค๋ณต ์ ๊ฑฐ
- dictionary/(POS).dic ํ์ฌ๋ณ ์ฌ์
์ ๊ณต๋๋ ๋๊ตฌ
00.prepare.sh
- ํ์ํ ์ ํธ๋ฆฌํฐ ํน์ ์ธํฐํ๋ฆฌํฐ์ ์ค์น๋ฅผ ํ์ธํฉ๋๋ค
10.list.sh
- ์ธ์ด์ ๋ณด๋๋ํฐ ์นํ์ด์ง์ ์ ์ํ์ฌ ํ์ํ ํ์ผ๋ค์ ๋ฆฌ์คํธ๋ฅผ ๋ฐ์์ต๋๋ค.
- logs/list.idx ํ์ผ์ ๊ธ์ ์์ฟฝ์ค๊ฐ ์ ์ฅ๋ฉ๋๋ค.
20.schedule.sh
- ๋ค์ด๋ก๋๋ฅผ ๋ณ๋ ฌ๋ก ์งํํ๊ธฐ ์ํ ์ค์ผ์ฅด๋ฌ์ ๋๋ค.
- logs/list.idx ๋ฅผ ๊ฐ ๋ค์ด๋ก๋์ ๋ถ๋ฐฐํฉ๋๋ค.
- make ๋ช ๋ น์ ๋์์ ์ ์ํ ์๋ฅผ M์ด๋ผ๋ ๋ณ์๋ก ์ง์ ํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ์ 4 ์ ๋๋ค.
make M=10
21.getcontent.sh
- 02.schedule.sh ์ ์ํด ์คํ๋๋ ๊ฒ์๊ธ ๋ค์ด๋ก๋์ ๋๋ค.
- logs/list.idx ์ ์์์์น์ ๊ฐฏ์๋ฅผ ์ ๋ ฅ๋ฐ์ ์คํํฉ๋๋ค. (Makefile ์ฐธ์กฐ)
22.download.sh
- 03.getcontent.sh์ ์ํด ์คํ๋๋ ์ฒจ๋ถํ์ผ ๋ค์ด๋ก๋์ ๋๋ค.
- ์น์๋ฒ๋ ์ฒจ๋ถํ์ผ์ด ํ ๊ฐ์ธ ๊ฒฝ์ฐ txt ํ์ผ๋ก, ์ฌ๋ฌ๊ฐ์ธ๊ฒฝ์ฐ zip ํ์ผ๋ก ๋ฌถ์ฌ ์ ๊ณตํฉ๋๋ค.
- ๋ฐ์ ํ์ผ์ corpus/XXXXXX.txt ํ์ผ๋ก ์ ์ฅ ํน์ ์์ถ์ด ํ๋ฆฝ๋๋ค.
- ๋ชจ๋ ํ์ผ์ XML ํ์์ผ๋ก ์ ๊ณต๋๋ฉฐ, ์๋ฌธ, ํํ์๋ถ์, ๋จ์ด์๋ฏธ๋ถ์ ๋ฑ ์ฌ๋ฌ ํ์์ด ์์ฌ ์์ต๋๋ค.
30.convert.sh
- ๋ฐ์ ํ์ผ์ utf16 ํฌ๋งท์ ๋๋ค. ์ด ํ์ผ์ utf8 ํ์์ผ๋ก ๋ณํํ ๋์์ ์ฐพ์ต๋๋ค.
31.convert-file.sh
- ์๋ณธ, ์ถ๋ ฅ ํ์ผ ์ด๋ฆ์ ๋ฐ์ ์ค์ ๋ณํ์ ์ํํฉ๋๋ค.
- UTF16์ UTF8์ผ๋ก ๋ณํํฉ๋๋ค.
- 05.convert-xml-tag.py ํ์ผ์ ์ด์ฉํ์ฌ xml escaping์ ํฉ๋๋ค.
33.patch.sh
- ๊ฐ ํ์ผ์ ํด๋นํ๋ patch ํ์ผ๋ค์ ์ฐพ์ ํจ์น๋ฅผ ์ํํฉ๋๋ค
- ํจ์น ํ์ผ๋ค์ ์ด๋ฆ์ patches/(CORPUSFILENAME)-(NNN).patch ํ์์ผ๋ก ๋์ด ์์ผ๋ฉฐ, ์๋ณธ์ ์ค๋ฅ๋ฅผ ์์ ํ๋ ๋ด์ฉ๋ง ๋ค์ด ์์ต๋๋ค.
32.convert-xml-tag.py
- XML ํ์ผ ๋ณธ๋ฌธ์ CDATA ์์ญ์ ํด๋นํ๋ ๋ด์ฉ์ด XML ๊ท์ฝ์ ๋ฐ๋ผ escaping๋์ด ์์ง ์์ต๋๋ค.
- ๋ง๋ญ์น๋ฅผ ๊ตฌ์ฑํ๋ ํ๊ทธ๋ค์ ์ ์ธํ ํ๊ทธํ์์ '<', '>' ๋ฌธ์๋ฅผ '<', '>' ๋ก ๋ณํํฉ๋๋ค.
40.extract.sh
- ๋ฐ์ ํ์ผ ์ค์์ ํํ์๋ถ์ํ์ผ๋ค์ ๋์์ผ๋ก ํํ์ ๋ถ์ ๊ฒฐ๊ณผ๋ง ์ถ์ถํ๊ณ ์/๋ชจ ๋ณด์ ์ ํฉ๋๋ค
- ์ถ๋ ฅ๋๋ ๊ฒฐ๊ณผ๋ logs/words.dic ์ ํตํฉํ์ฌ ์ ์ฅ๋ฉ๋๋ค.
41.extract.py
- 40.extract.sh์ ์ํด ์คํ๋๋ฉฐ ํ์ผ์์ ํํ์ ๋ถ์ ๋ถ๋ถ๋ง ์ถ์ถํฉ๋๋ค
42.jamo-conv.py
- 40.extract.sh์ ์ํด ์คํ๋๋ฉฐ, ํํ์ ๋ถ์ ๊ฒฐ๊ณผ์ค์์ ํน์ ์ฐ๊ตฌ ๊ฒฐ๊ณผ๋ ์ข ์ฑ์ ๊ทธ๋๋ก ์ข ์ฑ ์ฝ๋๋ก ์ ์ฅํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ์ด์ฑ์ผ๋ก ๋ณํํฉ๋๋ค.
60.build_dic.py
- ํ๋๋ก ํฉ์ณ์๋ ํํ์ ๋ถ์ ๊ฒฐ๊ณผ ๋ญ์น์์ ๊ฐ ํํ์๋ณ๋ก dictionary/(POS).dic ํ์ผ๋ก ๋ถํ ์ ๋ฆฌํฉ๋๋ค.
90.diff.sh
- ์๋ณธ ํ์ผ๊ณผ(corpus-utf8.orig/*.txt) ์์ ์๊ฐ ๋ณด์ ํ(corpus-utf8/*.txt) ํ์ผ์ ๋น๊ตํ์ฌ patches/*.patch ํ์ผ์ ๋ง๋ญ๋๋ค.