-- ๋ณธ ํฌ์คํ
์ ํ์ดํ ์น๋ก ๋ฐฐ์ฐ๋ ์์ฐ์ด ์ฒ๋ฆฌ (ํ๋น๋ฏธ๋์ด) ์ฑ
๊ณผ ์ํค๋
์ค๋ฅผ ์ฐธ๊ณ ํด์ ์์ฑ๋ ๊ธ์
๋๋ค.
-- ์ฐธ๊ณ ๋ฌธ์๋ ๋งํฌ๋ก ์ฒจ๋ถํด ๋์์ต๋๋ค.
โถ ํ์ ์ด์ ์ด๊ฐ
- ํ์ ์ด = ๋จ์ด์ ๊ธฐ๋ณธํ
- ๋์ฌ 'fly'์ ๋ณํ๋ ํํ → flow, flew, flies, flown, flowing... ์ด๋ฏธ๊ฐ ๋ณํ๋ฉด์ ์ฌ๋ฌ ๋จ์ด๋ก ๋ณํ
- ์ด ๋ชจ๋ ๋จ์ด์ ํ์ ์ด๋ fly ํ๋
1. ํ์ ์ด ์ถ์ถ (Lemmatization)
ํ์ ์ด ์ถ์ถ์ ๋จ์ด๋ค์ด ๋ค๋ฅธ ํํ๋ฅผ ๊ฐ์ง๋๋ผ๋, ๊ทธ ๋ฟ๋ฆฌ ๋จ์ด๋ฅผ ์ฐพ์๊ฐ์ ๋จ์ด์ ๊ฐ์๋ฅผ ์ค์ผ ์ ์๋์ง ํ๋จํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ๋ค์ด am, are, is ๋ ์๋ก ๋ค๋ฅธ ๋จ์ด ์ด์ง๋ง, be ๋์ฌ ํ๋๋ก ์ค์ผ ์ ์๋ค.
ํ์ ์ด๋ฅผ ์ถ์ถํ๋ ๊ฐ์ฅ ์ฌ์ธํ ๋ฐฉ๋ฒ์ ํํํ์ ํ์ฑ์ ๋จผ์ ์งํํ๋ ๊ฒ์ด๋ค. ์ฆ 'ํํ์'์๋ํ ๋ถ์์ด ํ์ํ๋ค. 'ํํ์'๋, '์๋ฏธ๋ฅผ ๊ฐ์ง ๊ฐ์ฅ ์์ ๋จ์ด'๋ฅผ ์๋ฏธํ๋ค.
- ํํ์์ ๊ตฌ์ฑ
- ์ด๊ฐ(stem) : ๋จ์ด์ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ ๋จ์ด์ ํต์ฌ ๋ถ๋ถ
- ์ ์ฌ(affix) : ๋จ์ด์ ๋ํ ์ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ์ฃผ๋ ๋ถ๋ถ
ํ์ ์ด๋ฅผ ์ถ์ถํ๊ธฐ ์ํ ํจํค์ง๋ nltk์ Spacy์์ ์ง์ํ๋ค.
1.1 nltk์์ ํ์ ์ด ์ถ์ถ ์งํํด๋ณด๊ธฐ
from nltk.stem import WordNetLemmatizer
nltk.download('wordnet')
n=WordNetLemmatizer()
words=['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
print([n.lemmatize(w) for w in words])
lives๋ life๋ก ํ์ ์ด ์ถ์ถ์ด ์ ์งํ๋์์ง๋ง, dy, ha, doing ๋ฑ ์ ์ ์๋ ๋จ์ด๋ ํ์ ์ด์ถ์ถ์ด ๋์ง ์์ ๋ถ๋ถ์ด ์กด์ฌํ๋ค. ์ด๋ ํ์ ์ด ์ถ์ถ์ ์ํด์๋ ํ์ ์ด์ถ์ถ๊ธฐ(lemmatizer)๊ฐ ์๋ ๋จ์ด์ ํ์ฌ ์ ๋ณด๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์์ด์ผ๋ง ํ์ ์ด ์ถ์ถ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฐ๋ผ์ lemmatizer์ ํด๋น ๋จ์ด์ ํ์ฌ๋ฅผ ์๋ ค์ค๋ค๋ฉด, ์ ํํ๊ฒ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
n.lemmatize('dies', 'v')
์ด๋ ๊ฒ dies๊ฐ ๋์ฌ์์ ์๋ ค์ฃผ๋, die๋ผ๊ณ ์ ์ ํ๊ฒ ํ์ ์ด ์ถ์ถ์ด ๋๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค.
1.2 spacy์์ ํ์ ์ด ์ถ์ถ ์งํํด๋ณด๊ธฐ
import spacy
nlp = spacy.load('en')
doc = nlp(u"he was running late")
for token in doc:
print('{} -> {}'.format(token, token.lemma_))
2. ์ด๊ฐ์ถ์ถ(Stemming)
์ด๊ฐ(stem)์ ์ถ์ถํ๊ธฐ ์ํด ์ ํด์ง ๊ท์น๋ง ๋ณด๊ณ ๋จ์ด๋ฅผ ์๋ฅด๋ ๋ฐฉ๋ฒ. ๋ฐ๋ผ์ ์๋ผ์ง ๋จ์ด๋ ํ์กดํ์ง ์๋ ๋จ์ด์ผ ์ ์๋ค.
nltk์์ ์ง์ํ๋ ๋ํ์ ์ธ stem์๊ณ ๋ฆฌ์ฆ์ด ๋ ๊ฐ๊ฐ ์๋ค.
2.1 porterstemmer (porter ์๊ณ ๋ฆฌ์ฆ)
from nltk.stem import PorterStemmer
s=PorterStemmer()
words=['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
print([s.stem(w) for w in words])
2.2 LancasterStemmer
from nltk.stem import LancasterStemmer
l=LancasterStemmer()
words=['policy', 'doing', 'organization', 'have', 'going', 'love', 'lives', 'fly', 'dies', 'watched', 'has', 'starting']
print([l.stem(w) for w in words])
๋๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋น๊ตํด ๋ณด๋ฉด doing์ ์๋ฅด๋ ๋ฐฉ๋ฒ, organ์ ์๋ฅด๋ ๋ฐฉ๋ฒ์ด ๋ชจ๋ ๋ค๋ฅด๋ค. ์ด์ฒ๋ผ ์ด๋ค ๊ท์น์ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ์ด๊ฐ์ถ์ถ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๋ค.
์ฐธ๊ณ ๋ด์ฉ ) https://wikidocs.net/21707