3.1 ํ ํฌ๋์ด์ง ์๊ฐ
์์ฐ์ด ์ฒ๋ฆฌ Natural Language Processing (NLP) : ์ปดํจํฐ ๋ถ์ผ์์๋ ์์ฐ์ด ์๋ฏธ๋ฅผ ๋ถ์ํด ์ปดํจํฐ๊ฐ ์ฒ๋ฆฌํ ์ ์๋๋ก ํ๋ ์ผ
์์ฐ์ด๋ฅผ ์ปดํจํฐ์ ์ดํด์ํค๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ
1. ์ฐ์ ์ด๋ค ๋ฌธ์ฅ์ ์ผ์ ํ ์๋ฏธ๊ฐ ์๋ ๊ฐ์ฅ ์์ ๋จ์ด๋ค๋ก ๋๋๋ค.
2. ๋๋ ์ง ๋จ์ด๋ค์ ์ด์ฉํ์ฌ ์๋ฏธ๋ฅผ ๋ถ์ํ๋ค. - ์ฌ๊ธฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋จ์ด๋ค์ ํ ํฐ token ์ด๋ผ๊ณ ํจ.
ํ ํฌ๋์ด์ง
- ์ฃผ์ด์ง ๋ฌธ์ฅ์์ ํ ํฐ ๋จ์๋ก ์ ๋ณด๋ฅผ ๋๋๋ ์์
- ๋ฌธ์ฅ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ์ผ ์ฒ์ ์ํํด์ผ ํ๋ ๊ธฐ๋ณธ์ ์ธ ์์ ์ผ๋ก ์ฃผ๋ก ํ ์คํธ ์ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์ฌ์ฉ
- ํ ํฌ๋์ด์ง์ ์ด๋ป๊ฒ ํ๋๋์ ๋ฐ๋ผ ์ฑ๋ฅ ์ฐจ์ด๊ฐ ๋ ์ ์์
3.2 KoNLPy
- ๊ธฐ๋ณธ์ ์ธ ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์คํ ์์ค ์ํํธ์จ์ด, GPL v3 ๋ผ์ด์ ์ค(๋๋ ๊ทธ ์ด์)์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด ํ๊ตญ์ด ์์ฐ์ด ์ฒ๋ฆฌ ๋ถ์ผ์์ ๋ง์ด ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
3.2.1 Kkma
- ์์ธ๋ํ๊ต IDS Intelligent Data System ์ฐ๊ตฌ์ค์์ ์์ฐ์ด ์ฒ๋ฆฌ๋ฅผ ์ํด ๊ฐ๋ฐํ ํ๊ตญ์ด ํํ์ ๋ถ์๊ธฐ
- '๊ผฌ๊ผฌ๋ง'๋ก ๋ฐ์ํ์ฌ, GPL v2 ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ
- ์ฌ์ฉ ๋ฐฉ๋ฒ
from konlpy.tag inport Kkma
- Kkma ๋ชจ๋์ ํจ์ ์ค๋ช
ํจ์ | ์ค๋ช |
morphs(phrase) | ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์ ํํ์ ๋จ์๋ก ํ ํฌ๋์ด์ง. ํ ํฌ๋์ด์ง๋ ํํ์๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ. |
nouns(phrase) | ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์์ ํ์ฌ๊ฐ ๋ช ์ฌ์ธ ํ ํฐ๋ง ์ถ์ถ. |
pos(phrase, flatten=True) | POS tagger๋ผ ๋ถ๋ฅด๋ฉฐ, ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์์ ํํ์๋ฅผ ์ถ์ถํ ๋ค ํ์ฌ ํ๊น . ์ถ์ถ๋ ํํ์์ ๊ทธ ํํ์์ ํ์ฌ๊ฐ ํํ ํํ๋ก ๋ฌถ์ฌ์ ๋ฆฌ์คํธ๋ก ๋ฐํ. |
sentences(phrase) | ์ธ์๋ก ์ ๋ ฅํ ์ฌ๋ฌ ๋ฌธ์ฅ์ ๋ถ๋ฆฌํด์ฃผ๋ ์ญํ . ๋ถ๋ฆฌ๋ ๋ฌธ์ฅ์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ |
- Kkma ํํ์ ๋ถ์๊ธฐ ์ฌ์ฉ
from konlpy.tag import Kkma
# Kkma ํํ์ ๋ถ์๊ธฐ ๊ฐ์ฒด ์์ฑ
kkma = Kkma()
text = "์๋ฒ์ง๊ฐ ๋ฐฉ์ ๋ค์ด๊ฐ๋๋ค."
# ํํ์ ์ถ์ถ
morphs = kkma.morphs(text)
print(morphs)
# ํํ์์ ํ์ฌ ํ๊ทธ ์ถ์ถ
pos = kkma.pos(text)
print(pos)
# ๋ช
์ฌ๋ง ์ถ์ถ
nouns = kkma.nouns(text)
print(nouns)
# ๋ฌธ์ฅ ๋ถ๋ฆฌ
sentences = "์ค๋ ๋ ์จ๋ ์ด๋์? ๋ด์ผ์ ๋ฅ๋ค๋๋ฐ."
s = kkma.sentences(sentences)
print(s)
- Kkma ํ์ฌ ํ๊ทธ kkma.snu.ac.kr/documents/?doc=postag
ํ์ฌ | ์ค๋ช |
NNG | ์ผ๋ฐ ๋ช ์ฌ |
JKS | ์ฃผ๊ฒฉ ์กฐ์ฌ |
JKM | ๋ถ์ฌ๊ฒฉ ์กฐ์ฌ |
VV | ๋์ฌ |
EFN | ํ์ํ ์ข ๊ฒฐ ์ด๋ฏธ |
SF | ๋ง์นจํ, ๋ฌผ์ํ, ๋๋ํ |
3.2.2 Komoran
- Shineware์์ ์๋ฐ๋ก ๊ฐ๋ฐํ ํ๊ตญ์ด ํํ์ ๋ถ์๊ธฐ. '์ฝ๋ชจ๋'
- Apache ๋ผ์ด์ ์ค 2.0์ ๋ฐ๋ฅด๋ ์คํ์์ค ์ํํธ์จ์ด
- ๊ฒฝ๋ํ ๋ฒ์ ๆ. ๋ค๋ฅธ ํํ์ ๋ถ์๊ธฐ์ ๋ค๋ฅด๊ฒ ๊ณต๋ฐฑ์ด ํฌํจ๋ ํํ์ ๋จ์๋ก๋ ๋ถ์์ด ๊ฐ๋ฅํด ๅค ์ฌ์ฉ.
- Komaran ๋ชจ๋์ ํจ์ ์ค๋ช
ํจ์ | ์ค๋ช |
morphs(phrase) | ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์ ํํ์ ๋จ์๋ก ํ ํฌ๋์ด์ง. ํ ํฌ๋์ด์ง๋ ํํ์๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ. |
nouns(phrase) | ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์์ ํ์ฌ๊ฐ ๋ช ์ฌ์ธ ํ ํฐ๋ค๋ง ์ถ์ถ. |
pos(phrase, flatten=True) | POS tagger๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์์ ํํ์๋ฅผ ์ถ์ถํ ๋ค ํ์ฌ ํ๊น . ์ถ์ถ๋ ํํ์์ ๊ทธ ํํ์์ ํ์ฌ๊ฐ ํํ ํํ๋ก ๋ฌถ์ฌ์ ๋ฆฌ์คํธ๋ก ๋ฐํ |
- Komoran ํํ์ ๋ถ์๊ธฐ ์ฌ์ฉ
from konlpy.tag import Komoran
# ์ฝ๋ชจ๋ ํํ์ ๋ถ์๊ธฐ ๊ฐ์ฒด ์์ฑ
komoran = Komoran()
text = "์๋ฒ์ง๊ฐ ๋ฐฉ์ ๋ค์ด๊ฐ๋๋ค."
# ํํ์ ์ถ์ถ
morphs = komoran.morphs(text)
print(morphs)
# ํํ์์ ํ์ฌ ํ๊ทธ ์ถ์ถ
pos = komoran.pos(text)
print(pos)
# ๋ช
์ฌ๋ง ์ถ์ถ
nouns = komoran.nouns(text)
print(nouns)
- ํ์ฌ ํ๊ทธ docs.komoran.kr/firststep/postype.html ์ฐธ๊ณ
3.2.3 Okt
- Okt Open-source Korean Text Processor ์ ํธ์ํฐ์์ ๊ฐ๋ฐํ Twitter ํ๊ตญ์ด ์ฒ๋ฆฌ๊ธฐ์์ ํ์๋ ์คํ ์์ค(์ํ์น 2.0 ๋ผ์ด์ ์ค) ํ๊ตญ์ด ์ฒ๋ฆฌ๊ธฐ
ํจ์ | ์ค๋ช |
morphs(phrase) | ์ธ์๋ก ์
๋ ฅํ ๋ฌธ์ฅ์ ํํ์ ๋จ์๋ก ํ ํฌ๋์ด์ง. ํ ํฌ๋์ด์ง๋ ํํ์๋ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐํ. |
nouns(phrase) | ์ธ์๋ก ์ ๋ ฅํ ๋ฌธ์ฅ์์ ํ์ฌ๊ฐ ๋ช ์ฌ์ธ ํ ํฐ๋ค๋ง ์ถ์ถ. |
pos(phrase, stem=False, join=False) | POS tagger๋ผ ๋ถ๋ฅด๋ฉฐ, ์ธ์๋ก ์
๋ ฅํ ๋ฌธ์ฅ์์ ํํ์๋ฅผ ์ถ์ถํ ๋ค ํ์ฌ ํ๊น
์งํ. ์ถ์ถํ ํํ์์ ๊ทธ ํํ์์ ํ์ฌ๊ฐ ํํ ํํ๋ก ๋ฌถ์ฌ์ ๋ฆฌ์คํธ๋ก ๋ฐํ๋จ. |
normalize(phrase) | ์
๋ ฅํ ๋ฌธ์ฅ ์ ๊ทํ ex) ์ฌ๋ํใ ใ > ์ฌ๋ํดใ ใ ใ |
phrases(phrase) | ์
๋ ฅํ ๋ฌธ์ฅ ์ด๊ตฌ ์ถ์ถ ex) [์ ๋ ฅ] ์ค๋ ๋ ์จ๊ฐ ์กฐ์์ [์ถ๋ ฅ] ['์ค๋', '์ค๋ ๋ ์จ', '๋ ์จ'] |
- Okt ํํ์ ๋ถ์๊ธฐ ์ฌ์ฉ
from konlph.tag import Okt
# Okt ํํ์ ๋ถ์๊ธฐ ๊ฐ์ฒด ์์ฑ
okt = Okt()
text = "์๋ฒ์ง๊ฐ ๋ฐฉ์ ๋ค์ด๊ฐ๋๋ค."
# ํํ์ ์ถ์ถ
morphs = okt.morphs(text)
print(morphs)
# ํํ์์ ํ์ฌ ํ๊ทธ ์ถ์ถ
pos = okt.pos(text)
print(pos)
# ๋ช
์ฌ๋ง ์ถ์ถ
nouns = okt.nouns(text)
print(nouns)
# ์ ๊ทํ, ์ด๊ตฌ ์ถ์ถ
text = "์ค๋ ๋ ์จ๊ฐ ์ข์์ฌใ
ใ
"
print(okt.normalize(text))
print(okt.phrase(text))
- Okt ํ์ฌ ํ๊ทธ ํ https://openkoreantext.org/
ํ์ฌ | ์ค๋ช |
Noun | ๋ช ์ฌ |
Verb | ๋์ฌ |
Adjective | ํ์ฉ์ฌ |
Josa | ์กฐ์ฌ |
Punctuation | ๊ตฌ๋์ |
3.2.4 ์ฌ์ฉ์ ์ฌ์ ๊ตฌ์ถ
- ์๋กญ๊ฒ ์๊ฒจ๋๋ ๋จ์ด๋ ๋ฌธ์ฅ์ ํํ์ ๋ถ์๊ธฐ์์ ์ธ์์ด ์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์.
- Komoran์ด ๋ค๋ฅธ ํํ์ ๋ถ์๊ธฐ์ ๋นํด ์ฌ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ด ํธ๋ฆฌํ๋ฉฐ ํํ์ ๋ถ์ ์ฑ๋ฅ๊ณผ ์๋๊ฐ ๊ด์ฐฎ์ ํธ.
- ์ฌ์ฉ์ ๋จ์ด ์ถ๊ฐ ๋ฐฉ๋ฒ
# [๋จ์ด] Tab [ํ์ฌ]
์์ํผ Tab NNG
๋๋ ๋ด์ผ, ์ด์ ์ ๋์ ๋ง๋๋ค Tab NNG
3.3 ๋ง์น๋ฉฐ
- KoNLPy ํํ์ ๋ถ์๊ธฐ ๋น๊ต
ํํ์ ๋ถ์๊ธฐ | ์ฅ์ | ๋จ์ |
Kkma | ๋ถ์ ํ์ง์ด ์ข์ ์ง์ํ๋ ํ์ฌ ํ๊ทธ๊ฐ ๊ฐ์ฅ ๋ง์ |
๋ถ์ ์๋๊ฐ ๋๋ฆผ ์ฌ์ฉ์ ์ฌ์ ์ผ๋ก ์ถ๊ฐํ ๋ณตํฉ ๋ช ์ฌ์ ๋ํด ๋ถ์์ ํ๊ฒ ๋์ํจ |
Komoran | ์์๊ฐ ๋ถ๋ฆฌ๋ ๋ฌธ์ฅ์ด๋ ์คํ์์ ๊ฐํจ ์ฌ์ฉ์ ์ฌ์ ๊ด๋ฆฌ ์ฉ์ด |
์ ๋นํ ๋ถ์ ํ์ง๊ณผ ๋ถ์ ์๋ |
Okt | ๋งค์ฐ ๋น ๋ฅธ ๋ถ์ ์๋ ์ ๊ทํ ๊ธฐ๋ฅ ์ง์ |
์ฌ์ฉ์ ์ฌ์ ๊ด๋ฆฌ ์ด๋ ค์ ์ฉ์ธ ๋ถ์์ ์ผ๊ด์ฑ์ด ๋ถ์กฑํจ |