ๆฅๆฌ่ชReadme: README_ja.md
NK-HanDic(๋ถํ๋)์ ํํ์ ๋ถ์ ์์ง MeCab(๋ฉ์นด๋ถ)๋ก ๋ถํ์ ์ธ์ด(์กฐ์ ์ด)๋ฅผ ๋ถ์ํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ๋ถ์ ์ฌ์ ์ ๋๋ค. 22๋ง ๊ฐ๊ฐ ๋๋ ํญ๋ชฉ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ณ , ๋ก๋์ ๋ฌธ์ด๋ ๋ถํ ์์ค ๋ฑ ๋ฌธ์ด๋ฅผ ์ค์ฌ์ผ๋ก ํ ๋ฐ์ดํฐ๋ก ํ์ต, ๊ตฌ์ถ๋์์ต๋๋ค.
์ ์๊ถ ๋ฌธ์ ๋ก ํ์ต ๋ฐ์ดํฐ ์์ฒด๋ ๊ณต๊ฐํ์ง ์์ง๋ง ๋ชจ๋ธ ํ์ผ์ ํจํค์ง์ ํฌํจ๋์ด ์์ต๋๋ค.
Python ํจํค์ง nkhandic ์ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ์ผ ๊ตฌ์ถ ์์ด ๋ฐ๋ก ํํ์ ๋ถ์์ ์์ํ ์ ์์ต๋๋ค.
pip install nkhandic mecab-python3 jamotoolsimport nkhandic
text = "์ฐ๋ฆฌ์ ๊ฒฝ์ ํ๋ ์ด๋น์๋์ง๊ป์๋ ์ด์ฉ๋ฉด ๊ทธ๋ฆฌ๋ ์๋ํ์ ๊ฐ."
print(nkhandic.pos_tag(text))
print(nkhandic.tokenize_hangul(text, mode="surface"))
print(nkhandic.convert_text_to_hanja_hangul(text))์ถ๋ ฅ ๊ฒฐ๊ณผ
[('์ฐ๋ฆฌ03', 'NP'), ('์10', 'JKG'), ('๊ฒฝ์ 01', 'NNG'), ('ํ๋ค02', 'XSV'), ('๋03', 'ETM'), ('์ด๋น์', 'NNG'), ('๋์ง006', 'NNG'), ('๊ป์', 'JKS'), ('๋01', 'JX'), ('์ด์ฉ๋ฉด', 'MAG'), ('๊ทธ๋ฆฌ๋', 'MAG'), ('์๋02', 'XR'), ('ํ๋ค02', 'XSA'), ('์', 'EP'), ('ใด๊ฐ', 'EF'), ('.', 'SF')]
['์ฐ๋ฆฌ', '์', '๊ฒฝ์ ', 'ํ', '๋', '์ด๋น์', '๋์ง', '๊ป์', '๋', '์ด์ฉ๋ฉด', '๊ทธ๋ฆฌ๋', '์๋', 'ํ', '์', 'ใด๊ฐ', '.']
์ฐ๋ฆฌ์ ๆฌๆํ๋ ็ธฝ็งๆธๅๅฟ๊ป์๋ ์ด์ฉ๋ฉด ๊ทธ๋ฆฌ๋ ๅๅคงํ์ ๊ฐ.- PyPI: https://pypi.org/project/nkhandic/
- MeCab Python ๋ํผ(
mecab-python3), ํ๊ธ ์ฒ๋ฆฌ ํํค์ง(jamotools)์ ํจ๊ป ์ฌ์ฉ
Python์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ, ๋ก์ปฌ์์ MeCab์ผ๋ก ํํ์ ๋ถ์ ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒฝ์ฐ์๋ ๋ถ์์ฉ binary dictionary๋ฅผ ๊ตฌ์ถํ ํ์๊ฐ ์์ต๋๋ค.
- MeCab
- Python or Perl
โ ๏ธ ์ค์NK-HanDic์ ์์ฑํ ํ๊ธ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
ํํ์ ๋ถ์์ ํ๊ธฐ ์ ์ ๋ฐ๋์ Jamo(์๋ชจ) ๋จ์๋ก ๋ถํด๋ ๋ฌธ์์ด์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค.์๋ชจ ๋ณํ์ ๊ฑฐ์น์ง ์์ ์ ๋ ฅ์ ๋ํด์๋ ์ ์์ ์ธ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฅํ์ง ์์ต๋๋ค.
mecab-dict-index, mecab-dict-gen ๋ฑ์ ์์น๋ mecab-config --libexecdir์ ์ถ๋ ฅ์ ์ฐธ์กฐํ์ญ์์ค.
์๋์์๋ /usr/local/libexec/mecab์ ์๋ค๊ณ ๊ฐ์ .
# git clone
git clone https://github.com/okikirmui/nkhandic.git
cd handic
# ์์ธ
/usr/local/libexec/mecab/mecab-dict-index -f utf8 -t utf8
# ๊ธฐํ์ต ๋ชจ๋ธ ํ์ผ model์ ์ฌ์ฉํ์ฌ binary ์ฌ์ ๊ตฌ์ถ
# /usr/local/lib/mecab/dic/nkhandic ๋๋ ํ ๋ฆฌ์ ์ถ๋ ฅ
/usr/local/libexec/mecab/mecab-dict-gen -o /usr/local/lib/mecab/dic/nkhandic -m model
# ๋ฐฐํฌ์ฉ ์ฌ์ ๊ตฌ์ถ
$ cd /usr/local/lib/mecab/dic/nkhandic
$ /usr/local/libexec/mecab/mecab-dict-index -f utf8 -t utf8๋ถ์ํ ๋ ์ค์ ๋ก ํ์ํ ํ์ผ์ char.bin, dicrc, matrix.bin, sys.dic, unk.dic์
๋๋ค.
MeCab๋ฅผ ์คํํ ๋ -d ์ต์
์ผ๋ก ์ฌ์ ํ์ผ์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
$ mecab -d /usr/local/lib/mecab/dic/nkhandic์ ๋ฐฉ๋ฒ์ผ๋ก๋ ์คํํ ๋๋ง๋ค ์ฌ์ ์ ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
ํ ๋๋ ํ ๋ฆฌ์ .mecabrc ํ์ผ์ ์์ฑํ์ฌ dicdir์ HanDic ์ฌ์ ํ์ผ์ด ํฌํจ๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๊ธฐ์ ํ ์ ์์ต๋๋ค.
dicdir = /usr/local/lib/mecab/dic/nkhandic
์ ๋ฐฉ๋ฒ์ผ๋ก๋ ํญ์ NK-HanDic์ผ๋ก ๋ถ์ํ๊ฒ ๋ฉ๋๋ค.
NK-HanDic์ UTF-8 ์ธ์ฝ๋ฉ๋ ํ ์คํธ๋ฅผ ์ ๋ ฅํ์ฌ ํํ์ ๋ถ์์ ์คํํฉ๋๋ค. ์ ๋ ฅํ ๋์๋ ์์ฑํ ํ๊ธ(Hangul Syllables ์์ญ์ ๋ฌธ์)๊ฐ ์๋๋ผ ์ด์ฑยท์ค์ฑยท์ข ์ฑ์ผ๋ก ๋ถ๋ฆฌํ ์ฒซ๊ฐ๋ ์ฝ๋(์กฐํฉํ, ํ๊ธ ์๋ชจ ์์ญ์ ๋ฌธ์)๋ก ๊ธฐ์ ํ ํ์๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์์ฑํ ํ๊ธ์ '๋ชธ'(U+BAB8)์ ํ๊ธ ์๋ชจ ์์ญ์ ๊ธ์๋ฅผ ์ฌ์ฉํ์ฌ 'ใ '(U+1106), 'ใ '(U+1169), 'ใ '(U+11B7)์ผ๋ก ๋๋์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ผ ํฉ๋๋ค.
์ด๋ฌํ ๋ณํ ์ฒ๋ฆฌ๋ ์์๋ก ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ ์ฒ๋ฆฌํด๋ ๊ด์ฐฎ์ต๋๋ค.
์ด ํ๋ก์ ํธ์์๋ Perl ์คํฌ๋ฆฝํธ k2jamo.pl๊ณผ Python ์คํฌ๋ฆฝํธ k2jamo.py๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. tools ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
k2jamo.pl๋ก input.txt๋ฅผ ๋ถ์ํ ๊ฒฝ์ฐ:
$ perl k2jamo.pl input.txt | mecab -d /usr/local/lib/mecab/dic/nkhandicํน์ ๋ฌธ์ฅ์ ์ง์ ์ ๋ ฅํ ๊ฒฝ์ฐ:
$ echo "๋ค์๊ณผ ๊ฐ์ด ๋ง์ํ์์๋ค." | perl k2jamo.pl | mecab -d /usr/local/lib/mecab/dic/nkhandic์ฒ๋ผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ถ๋ ฅ ํฌ๋งท์ ์ง์ ํ๋ -O ์ต์
์ ์ฌ์ฉํ์ฌ ํ ํฐํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค.
์ถ๋ ฅ ํฌ๋งท์ผ๋ก tokenize๋ฅผ ์ง์ ํฉ๋๋ค.
$ echo "์ฐ๋ฆฌ์ ๊ฒฝ์ ํ๋ ์ด๋น์๋์ง๊ป์๋ ์ด์ฉ๋ฉด ๊ทธ๋ฆฌ๋ ์๋ํ์ ๊ฐ." | perl k2jamo.pl | mecab -d /usr/local/lib/mecab/dic/nkhandic -O tokenize์ถ๋ ฅ:
๋ค์ ๊ณผ ๊ฐ์ด ๋ง์ ํ ์์ฌ ใ
๋ค .
ํ์ฌ ์ ๋ณด์ ๊ดํ ์ ๋ณด๋ ํ์ฌ ์ ๋ณด ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์๊ธฐ ๋ฐ๋๋๋ค.
์ฌ์ ๊ตฌ์ถ์ ์์ด์ MeCab์ ์ฌํ์ต(ๅๅญธ็ฟ) ๊ธฐ๋ฅ(ใชใชใธใใซ่พๆธ/ใณใผใในใใใฎใใฉใกใผใฟๆจๅฎ(์ผ๋ณธ์ด) ์ฐธ์กฐ)์ ์ด์ฉํ์์ต๋๋ค.
ํ๋ ํ๊ตญ์ด ๋ถ์ ์ฌ์ HanDic ๋ฐ์ดํฐ์ ์๋์์ ์ค๋ช
ํ๋ ์กฐ์ ์ด ํญ๋ชฉ(z_NK.csv)์ ์ถ๊ฐํ์ฌ HanDic ํ์ต ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก ์กฐ์ ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์ฌํ์ตํ์์ต๋๋ค.
๊ตฌ์ฒด์ ์ธ ์ ์ฐจ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
mecab-dict-index ์ฒ๋ฆฌ ํ, ์ฌํ์ต ์คํ. ๋ชจ๋ ํ์ผ์ด ๊ฐ์ ๋๋ ํ ๋ฆฌ์ ์๋ ๊ฒฝ์ฐ.
์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋:
handic_model: HanDic ํ์ต ๋ชจ๋ธcorpus.txt: ์กฐ์ ์ด ์ฌํ์ต์ฉ ๋ง๋ญ์น
# ์ฌํ์ต
$ /usr/local/libexec/mecab/mecab-cost-train -p 2 -M handic_model -c 1.0 corpus.txt model
# ์ฌ์ ์์ฑ(final ๋๋ ํ ๋ฆฌ์ ์ถ๋ ฅํ ๊ฒฝ์ฐ)
$ /usr/local/libexec/mecab/mecab-dict-gen -o final -d . -m model
# ๋ถ์์ฉ binary ์ฌ์ ๊ตฌ์ถ
$ cd final
$ /usr/local/libexec/mecab/mecab-dict-index -f utf8 -t utf8์ฌํ์ต์ ์ฌ์ฉํ ์กฐ์ ์ด ๋ฐ์ดํฐ ํํฉ์ ์๋์ ๊ฐ์ต๋๋ค.
| ์๋ฃ | ๋ถ์ผ | ๊ธฐ์ฌ/๊ถ ์ | ๋ฌธ์ฅ ์ |
|---|---|---|---|
| ๋ก๋์ ๋ฌธ | ์ฌ์ค | 18 | 325 |
| ๋ก๋์ ๋ฌธ | ๋ ์ง๋ณ ๊ธฐ์ฌ | 293 | 5,059 |
| ๋ก๋์ ๋ฌธ | ์ฌํ๋ฌธํ์ํ | 24 | 428 |
| ๋ก๋์ ๋ฌธ | ์ ์งํ๋ ์กฐ์ | 17 | 538 |
| ์กฐ์ ๋ฌธํ | ์์ค | 8 | 400 |
| ํฉ๊ณ | 360 | 6,750 |
์์ธํ ๋ชฉ๋ก์ ํ์ต์ฉ ๋ฐ์ดํฐ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ ๊ฒ.
์ฃผ์
์์ ๋ฒ์ ์์๋ ํ์ต์ฉ ๋ฐ์ดํฐ์ ์กฐ์ ์ด ๊ต์ฌ๋ฅผ ๋ง์ด ํฌํจ์์ผฐ์ผ๋ ๋ถ์ ์ฑ๋ฅ ๋ฑ์ ๊ณ ๋ คํด ํ์ฌ ์์ ๊ฐ์ ๊ตฌ์ฑ์ผ๋ก ์ฌ์ ์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
์ฌ์ ํญ๋ชฉ์ ํ๋ ํ๊ตญ์ด ๋ถ์ ์ฌ์ HanDic๋ฅผ ๋ฐํ์ผ๋ก ํ์ฌ ์ถ๊ฐ๋ก ๋ค์๊ณผ ๊ฐ์ ์๋ฃ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฑ๋กํ์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ง์: 2024๋ 4์ ์์ ์ ์ ์ฒด ๋ฐ์ดํฐ ์ค '๋ถํ๋ง'๋ก ๊ธฐ์ ๋ ํญ๋ชฉ
- ์ฐ์ ์ฐ๊ตฌ์DB KIET ๋ถํ ์ฐ์ ยท๊ธฐ์ DB: ๋ถํ ๊ธฐ์ ๋ชฉ๋ก
- ํต์ผ๋ถ ๋ถํ์ ๋ณดํฌํธ: โ๋ถํ ์ง๋โ์์ โ๋ฐฑํ์ โ, โ์์ โ, โํด์์โ, โํธํ โ, โ๋ ค๊ดโ, โ์ผ์์โ, โ๋ํโ ๋ฑ์ ๊ฒ์์ด๋ก ๊ฒ์๋ ํญ๋ชฉ
- ํต์ผ๋ถ ๋ถํ์ ๋ณดํฌํธ์์ ์ทจ๋ํ ใ๋ถํ ๊ธฐ๊ด๋ณ ์ธ๋ช ๋ก(๋ณธ๊ถ)ใใ๋ถํ ๊ธฐ๊ด๋ณ ์ธ๋ช ๋ก(๋ณ์ฑ )ใ 2022, 2023์ ๊ธฐ์ฌ๋ ๊ธฐ๊ด๋ช , ์ธ๋ช ์ ์ผ๋ถ
- ํ๋ ํ๊ตญ์ด ๋ถ์ ์ฌ์ HanDic ๋ฐ์ดํฐ ์ค ์ฉ์ธ์ ์ผ๋ถ๋ฅผ ์์
ใ์กฐ์ ๋ง๋์ฌ์ ใ(2017๋ )์ ์ฐธ์กฐํ์ฌ ์ถ๊ฐํ ํญ๋ชฉ๋ ์์ต๋๋ค.
- Yoshinori Sugai(์ค๊ฐ์ด ์์๋ ธ๋ฆฌ/้ ่ณไบ็พฉๆ, Kindai University)
- ์ค๊ฐ์ด ์์๋ ธ๋ฆฌ(2024), `๋ถํ ์กฐ์ ์ด ํํ์ ๋ถ์ ์ฌ์ ๊ตฌ์ถ์ ๊ดํ ์ฐ๊ตฌ', ํ๊ตญ์ฌ์ ํ ์ 44ํธ, ์์ธ: ํ๊ตญ์ฌ์ ํํ, pp.33-63.
Copyright (c) 2024- Yoshinori Sugai. All rights reserved.
''NK-HanDic'' is under BSD-3-Clause.