Artificial Intelligence/NLP

[NLP ๊ธฐ์ดˆ] ํ† ํฐํ™”(Tokenization, ํ† ํฌ๋‚˜์ด์ง•)

geum 2022. 6. 28. 13:51

๊ฐœ๋…

ํ…์ŠคํŠธ์— ๋Œ€ํ•ด ํŠน์ • ๊ธฐ์ค€ ๋‹จ์œ„๋กœ ๋ฌธ์žฅ์„ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์œผ๋กœ ํ† ํฐํ™”, ํ† ํฌ๋‚˜์ด์ง• ๋“ฑ ๋ถˆ๋ฆฌ๋Š” ์ด๋ฆ„์ด ๋‹ค์–‘ํ•˜๋‹ค. ํ† ํฐ์€ ๋ฌธ์žฅ์ด ๋ ์ˆ˜๋„ ์žˆ๊ณ  ๋‹จ์–ด๊ฐ€ ๋ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๋ณดํ†ต์€ ์œ ์˜๋ฏธํ•œ ๋‹จ์œ„๊ฐ€ ํ† ํฐ์œผ๋กœ ์ •์˜๋œ๋‹ค. 

 

์˜ˆ์‹œ

โ—ฝ ๋ฌธ๋‹จ

์ด์œ  ๋ชจ๋ฅผ ๊ฐ์ •์˜ ํ’์š”, ๊ทธ๋Š” ๋๋‚ด ๋งˆ์นจํ‘œ๋ฅผ ์ฑ„์›Œ ๋„ฃ์—ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Š” ํ™€๋กœ์ด ๋ชป๋‹ค ํ•œ ์ด์•ผ๊ธฐ๋“ค์„ ๋น„์šด๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ์˜ ์ด์•ผ๊ธฐ์˜ ์ฃผ์ธ๊ณต์€ ์—ฌ์ „ํžˆ ๊ทธ๋…€์ด๋‹ค.
๋‚˜๋Š” ์ด๊ฑธ ๋‚ญ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

 

๋น…๋‚˜ํ‹ฐ-๋‚ญ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•˜์˜€๋‹ค(Narr. ๊น€๊ธฐํ˜„)

 

โ—ฝ ๋ฌธ์žฅ ๋‹จ์œ„ ํ† ํฐํ™”

 

๋ฌธ์žฅ ๋‹จ์œ„๋กœ ํ† ํฐํ™”๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์˜จ์ (.)์„ ๊ธฐ์ค€์œผ๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด 4๊ฐœ์˜ ๋ฌธ์žฅ์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

 

โ—ฝ ๋‹จ์–ด ๋‹จ์œ„ ํ† ํฐํ™”

 

Python split()์ฒ˜๋Ÿผ ๋ฌธ์žฅ๋ถ€ํ˜ธ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ํ† ํฐํ™”ํ•˜๊ฑฐ๋‚˜, ๋ฌธ์žฅ๋ถ€ํ˜ธ๋„ ํ•˜๋‚˜์˜ ํ† ํฐ์œผ๋กœ ๋ณด๊ณ  ํ† ํฐํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. nltk ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ word_tokenize()๋Š” ๋ฌธ์žฅ๋ถ€ํ˜ธ๋„ ํ•˜๋‚˜์˜ ํ† ํฐ์œผ๋กœ ํŒŒ์•…ํ•œ๋‹ค.

 

โ—ฝ ํ˜•ํƒœ์†Œ ๋‹จ์œ„ ํ† ํฐํ™”(ํ•œ๊ตญ์–ด)

๋ฌธ์žฅ๋ถ€ํ˜ธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ์— ๋Œ€ํ•ด ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ํ† ํฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

์ด์œ  / ๋ชจ๋ฅผ / ๊ฐ์ • / ์˜ / ํ’์š” / ๊ทธ / ๋Š” / ๋๋‚ด / ๋งˆ์นจํ‘œ / ๋ฅผ / ์ฑ„์›Œ / ๋„ฃ์—ˆ๋‹ค

 

๊ตฌํ˜„

nltk ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(https://www.nltk.org/install.html)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์†์‰ฝ๊ฒŒ ๋ฌธ์žฅ/๋‹จ์–ด ๋‹จ์œ„ ํ† ํฐํ™”๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ๊ตญ์–ด ํ† ํฐํ™”์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” Okt(Open Korea text),  Mecab, KKma, Hannanum, Komoran์ด ์žˆ๋‹ค.

 

โ—ฝ ๋ฌธ์žฅ ๋‹จ์œ„ ํ† ํฐํ™”

from konlpy.tag import Okt
from nltk.tokenize import sent_tokenize, word_tokenize

sentences = sent_tokenize(paragraph)

 

โ—ฝ ๋‹จ์–ด ๋‹จ์œ„ ํ† ํฐํ™”

words = word_tokenize(paragraph)

 

โ—ฝ ํ˜•ํƒœ์†Œ ๋‹จ์œ„ ํ† ํฐํ™”(ํ•œ๊ตญ์–ด)

print('Okt ํ˜•ํƒœ์†Œ ๋ถ„์„ :',okt.morphs("๋‚˜๋Š” ์ด๊ฑธ ๋‚ญ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•˜์˜€๋‹ค."))
print('--------------------------------------------------------------------')
print('Okt ํ’ˆ์‚ฌ ํƒœ๊น… :',okt.pos("๋‚˜๋Š” ์ด๊ฑธ ๋‚ญ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•˜์˜€๋‹ค."))
print('--------------------------------------------------------------------')
print('Okt ๋ช…์‚ฌ ์ถ”์ถœ :',okt.nouns("๋‚˜๋Š” ์ด๊ฑธ ๋‚ญ๋งŒ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋กœ ํ•˜์˜€๋‹ค."))

 

โ€ป ์ „์ฒด ์ฝ”๋“œ ๋ฐ ์‹คํ–‰ ๊ฒฐ๊ณผ : https://github.com/nsbg/NLP/blob/main/basic/tokenization.ipynb