์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- iloc
- ADP
- ์๋ํด๋ผ์ฐ๋
- PCA
- dataframe
- ๋น ๋ฐ์ดํฐ
- opencv
- ํ์ด์ฌ
- ๋์ํ๋ณธ
- ๋ ๋ฆฝํ๋ณธ
- numpy
- pandas
- ํฌ๋กค๋ง
- ์ฃผ์ฑ๋ถ๋ถ์
- LDA
- Lambda
- datascience
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- DBSCAN
- t-test
- ADsP
- ์ค๋ฒ์ํ๋ง
- ๊ตฐ์งํ
- Python
- ๋ฐ์ดํฐ๋ถ์
- ์ธ๋์ํ๋ง
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- ํ ์คํธ๋ถ์
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
Data Science LAB
[Python]ํ ์คํธ ์ ์ฒ๋ฆฌ - ํ ์คํธ ์ ๊ทํ ๋ณธ๋ฌธ
[Python]ํ ์คํธ ์ ์ฒ๋ฆฌ - ํ ์คํธ ์ ๊ทํ
ใ ใ ใ ใ 2022. 2. 17. 12:39ํ ์คํธ ์์ฒด๋ฅผ ๋ฐ๋ก ํผ์ฒ๋ก ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์, ํ ์คํธ๋ฅผ ๊ฐ๊ณตํด์ฃผ๋ ์์ ์ด ํ์ํ๋ค.
ํ ์คํธ ์ ๊ทํ๋ ํ ์คํธ๋ฅผ ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ NLP ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ๊ธฐ ์ํด ํด๋ ์ง, ์ ์ , ํ ํฐํ, ์ด๊ทผ ๋ฑ์ ๋ค์ํ ํ ์คํธ ๋ฐ์ดํฐ์ ์ฌ์ ์์ ์ ์ํํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
ํด๋ ์ง(Cleansing)
ํด๋ ์ง์ ํ ์คํธ์์ ๋ถ์์ ๋ฐฉํด๋๋ ๋ฌธ์๋ ๊ธฐํธ ๋ฑ์ ๋จผ์ ์ ๊ฑฐํ๋ ์์ ์ด๋ค. (XTML, XMLํ๊ทธ ๋ฑ)
ํ ์คํธ ํ ํฐํ(Tokenization)
- ๋ฌธ์ฅ ํ ํฐํ : ๋ฌธ์์์ ๋ฌธ์ฅ์ ๋ถ๋ฅ
- ๋จ์ด ํ ํฐํ : ๋ฌธ์ฅ์์ ๋จ์ด๋ฅผ ํ ํฐ์ผ๋ก ๋ถ๋ฆฌ
์์ ๋๊ฐ์ง ์ข ๋ฅ๋ก ๋๋๋ค.
๋ฌธ์ฅ ํ ํฐํ
๋จผ์ , ๋ฌธ์ฅ ํ ํฐํ๋ ๋ฌธ์ฅ์ ๋ง์นจํ(.)๋ ๊ฐํ๋ฌธ์(\n) ๋ฑ ๋ฌธ์ฅ์ ๋ง์ง๋ง์ ๋ปํ๋ ๊ธฐํธ์ ๋ฐ๋ผ ๋ถ๋ฆฌํ๋ค.
NLTK์์๋ ์ผ๋ฐ์ ์ผ๋ก sent_tokenize๋ฅผ ์ด์ฉํด ํ ํฐํ๋ฅผ ํ๋ค.
3๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ฅ์ผ๋ก ๊ฐ๊ฐ ๋ถ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
from nltk import sent_tokenize
import nltk
nltk.download('punkt')
nltk.download('punkt')์ ์ด์ฉํ๋ฉด ๋ง์นจํ, ๊ฐํ๋ฌธ์ ๋ฑ์ ๋ฐ์ดํฐ ์ ์ ๋ค์ด ๋ฐ์ ์ ์๋ค.
#3๊ฐ์ ๋ฌธ์ฅ์ผ๋ก๋ ๋ฌธ์๋ฅผ ๋ฌธ์ฅ์ผ๋ก ๋ถ๋ฅ
text_sample = "The Matrix is everywhere its all around us, here even in this room.\
You can see it out your window or on your television. \
You feel it when you go to work, or go to chuarch or pay your taxes."
sentences = sent_tokenize(text = text_sample)
print(type(sentences),len(sentences))
print(sentences)
sent_tokenize()๋ ๊ฐ๊ฐ ๋ฌธ์ฅ์ผ๋ก ๊ตฌ์ฑ๋ list๊ฐ์ฒด๋ฅผ ๋ฐํํด ์ค๋ค. ๋ฐํ๋ list๊ฐ์ฒด๊ฐ ๋ฌธ์ฅ์ผ๋ก๋ ๋ฌธ์์ด์ ๊ฐ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋จ์ด ํ ํฐํ
๋จ์ด ํ ํฐํ(Word Tokenization)๋ ๋ฌธ์ฅ์ ๋จ์ด๋ก ํ ํฐํ ํ๋ ๊ฒ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฝค๋ง(,)๋ ๋ง์นจํ(.), ๊ณต๋ฐฑ์ผ๋ก ๋จ์ด๋ฅผ ๋ถ๋ฆฌํ๋ค. ์ ๊ท ํํ์์ ์ด์ฉํด์ ๋ค์ํ ์ ํ์ผ๋ก ํ ํฐํ๋ฅผ ํ ์๋ ์๋ค.
NLTK์์ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ๋ word_tokenize()๋ฅผ ์ด์ฉํด ๋จ์ด ํ ํฐํ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
from nltk import word_tokenize
sentence = "The Matrix is everywhere its all around us, here even in this room."
words = word_tokenize(sentence)
print(type(words),len(words))
print(words)
์์๋ก ์๋ฌด ๋ฌธ์ฅ์ด๋ sentence์ ๋ฃ๊ณ , word_tokenize()๋ฅผ ์ด์ฉํด ๋จ์ด ํ ํฐํ๋ฅผ ํด๋ณธ ๊ฒฐ๊ณผ,
๋ฆฌ์คํธ์ 15๊ฐ์ ๋จ์ด๋ก ๋๋์ด์ ์ ์ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ด๋ฒ์๋ ๋ฌธ์ฅ ํ ํฐํ์ ๋จ์ด ํ ํฐํ๋ฅผ ํฉ์ณ ๋ฌธ์์ ๋ชจ๋ ๋จ์ด๋ฅผ ํ ํฐํ ํด๋ณด๋ ค๊ณ ํ๋ค.
์๊น ์์ ์์ ์์๋ก ๋ฃ์ 3๊ฐ์ ๋ฌธ์ฅ์ผ๋ก ๋ text_sample์ ์ด์ฉํด ๋ฌธ์ฅ๋ณ๋ก ๋จ์ด ํ ํฐํ๋ฅผ ์ ์ฉํ๋ค.
from nltk import word_tokenize,sent_tokenize
#์ฌ๋ฌ ๋ฌธ์ฅ์ผ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ฅ๋ณ๋ก ๋จ์ด ํ ํฐํํ๊ฒ ๋ง๋๋ ํจ์ ์์ฑ
def tokenize_text(text):
#๋ฌธ์ฅ๋ณ๋ก ๋ถ๋ฆฌ ํ ํฐ
sentences = sent_tokenize(text)
#๋ถ๋ฆฌ๋ ๋ฌธ์ฅ๋ณ ๋จ์ด ํ ํฐํ
word_tokens = [word_tokenize(sentence) for sentence in sentences]
return word_tokens
#์ฌ๋ฌ๋ฌธ์ฅ์ ๋ํด ๋ฌธ์ฅ๋ณ ๋จ์ด ํ ํฐํ
word_tokens = tokenize_text(text_sample)
print(type(word_tokens),len(word_tokens))
print(word_tokens)
๋จผ์ , ๋ฌธ์ฅ ํ ํฐํ๋ฅผ ์ํํ ํ ๋จ์ด ํ ํฐํ๋ฅผ ์ํํ๋ ํจ์๋ฅผ ์์ฑํ์ฌ text_sample์ ์ ์ฉํ ๊ฒฐ๊ณผ,
๋ฌธ์ฅ๋ณ๋ก ๋จ์ด ํ ํฐํ๊ฐ ์ ์ด๋ฃจ์ด์ง ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๋ฌธ์ฅ ํ ํฐํ๋ฅผ ๋จผ์ ์งํํ์์ผ๋ฏ๋ก, ๋ฆฌ์คํธ์ ๊ฐ์ฒด 3๊ฐ๊ฐ ๋ดํฌ๋์ด ์ถ๋ ฅ๋์๋ค.
์คํฑ์๋์ ๊ฑฐ
์คํฑ ์๋(stop word)๋ ๋ถ์ํ ๋ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ฅผ ์๋ฏธํ๋ค.
์์ด์์ is, the, a ๋ฑ ๋ฌธ์ฅ์ ๊ตฌ์ฑํ๋ ํ์ ๋ฌธ๋ฒ ์์์ด์ง๋ง ๋ฌธ๋งฅ์ ์ผ๋ก๋ ํฐ ์๋ฏธ๊ฐ ์๋ ๋จ์ด๋ค์ด๋ค.
์ด๋ฌํ ๋จ์ด๋ค์ ๋ฌธ์ฅ์ ์์ฃผ ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐํ์ง ์์ผ๋ฉด ์ค์ํ ๋จ์ด๋ก ์ธ์ง๋ ์ ์๋ค.
๋จผ์ , NLTK์์ stopwords๋ชฉ๋ก์ ๋ค์ด๋ฐ๋๋ค.
(nltk.download()๋ฅผ ํ๋ฉด nltk์์ ๋ค์ด๋ฐ์ ์ ์๋ ๋ชฉ๋ก์ด ๋ชจ๋ ๋ค์ด๋๊ธฐ ๋๋ฌธ์ ์์ ๊ผญ ๋ค์ด๋ฐ๊ณ ์ ํ๋ ๊ฒ์ ์ ๋ ฅํด์ผํ๋ค!)
import nltk
nltk.download('stopwords')
๋ค์ด๋ก๋๊ฐ ์๋ฃ๋๋ฉด NLTK์์ ์์ด์ ๊ฒฝ์ฐ stopwords๊ฐ ๋ช ๊ฐ ์๋ ์ง ์์๋ณธ ํ, ๊ทธ์ค 20๊ฐ๋ง ํ์ธํด ๋ณธ๋ค.
print("์์ด stop words ๊ฐ์ :",len(nltk.corpus.stopwords.words('english')))
print(nltk.corpus.stopwords.words('english')[:20])
NLTK์์ ์์ด์ stop words๋ 179๊ฐ ์ด๋ฉฐ, i,me,my๋ฑ์ด ํฌํจ๋์ด์ ธ ์๋ ๊ฒ์ ์ ์ ์๋ค.
words_token๋ฆฌ์คํธ์ ๋ํด stopwords๋ฅผ ํํฐ๋ง์ผ๋ก ์ ๊ฑฐํด ๋ถ์์ ์๋ฏธ์๋ ๋จ์ด๋ง์ ์ถ์ถํด ๋ณด์๋ฉด
stopwords = nltk.corpus.stopwords.words('english')
all_tokens = []
#3๊ฐ์ ๋ฌธ์ฅ๋ณ๋ก ์ป์ word_tokens_list์ ๋ํด stopwords์ ๊ฑฐ
for sentence in word_tokens:
filltered_words = []
#๊ฐ๋ณ ๋ฌธ์ฅ๋ณ๋ก ํ ํฐํ๋ ๋ฌธ์ฅ list์ ๋ํด stopwords ์ ๊ฑฐ
for word in sentence:
#์๋ฌธ์๋ก ๋ชจ๋ ๋ณํ
word = word.lower()
#ํ ํฐํ๋ ๊ฐ๋ณ ๋จ์ด๊ฐ ์คํฑ ์๋์ ๋จ์ด์ ํฌํจ๋์ง ์์ผ๋ฉด word_tokens์ ์ถ๊ฐ
if word not in stopwords:
filltered_words.append(word)
all_tokens.append(filltered_words)
print(all_tokens)
3๊ฐ์ ๋ฌธ์ฅ์์ is, this๊ฐ์ ์คํฑ์๋๊ฐ ํํฐ๋ง์ ํตํด ์ ๊ฑฐ๋์์ ํ์ธํ ์ ์์
Stemming/Lemmatization
์์ด์ ๊ฒฝ์ฐ, ํ์ฌ/๊ณผ๊ฑฐ, 3์ธ์นญ์ผ ๋ ๋ฑ ์ฌ๋ฌ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋จ์ด์ ํํ๊ฐ ๋ณํํ๋ค. ๋ฐ๋ผ์ ๋จ์ด์ ์ํ์ ์ฐพ์ ๋ถ์์ ์งํํด์ผ ํ๋ค.
Stemming๊ณผ Lemmatization ๋ชจ๋ ๋จ์ด์ ์ํ์ ์ฐพ๋ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ง๋ง, Lemmatization์ด ๋ ์ ๊ตํ๋ฉฐ ์๋ฏธ๋ก ์ ์ธ ๊ธฐ๋ฐ์์ ๋จ์ด์ ์ํ์ ์ฐพ๋๋ค.
Stemming์ ๊ฒฝ์ฐ, ๋จ์ด์ ์ํ์ผ๋ก ๋ณํ ์ ์ผ๋ฐ์ ์ด๊ฑฐ๋ ๋จ์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ผ๋ถ ์ฒ ์๊ฐ ํผ์๋ ๋จ์ด ์ด๊ทผ์ ์ถ์ถํด๋ด๋ ๊ฒฝํฅ์ด ์๊ณ , Lemmatization์ ๋ฌธ๋ฒ์ ์ธ ์์์ ๋ ์๋ฏธ์ ์ธ ๋ถ๋ถ์ ๊ฐ์ํด ์ ํํ ์ฒ ์๋ก ์ถ์ถํด๋ด๋ ๊ฒฝํฅ์ด ์๋ค.
NLTK์์๋ ๋ค์ํ stemmer๋ฅผ ์ ๊ณตํ๋ค. ๋ํ์ ์ธ Stemmer์๋ Porter, Lancaster, Snowball Stemmer๊ฐ ์๋ค.
๋ํ Lemmatization์ ์ํด์๋ WordNetLemmatizer๋ฅผ ์ ๊ณตํ๋ค.
๋จผ์ , NLTK์ LancasterStemmer๋ฅผ ์ด์ฉํด ๋ณด๋ฉด, ์งํํ, 3์ธ์นญ ๋จ์, ๊ณผ๊ฑฐํ์ ๋ฐ๋ฅธ ๋์ฌ, ๋น๊ต ๋ฑ ํ์ฉ์ฌ์ ๋ณํ์ ๋ฐ๋ผ ๋ ๋จ์ํ๊ฒ ์ํ ๋จ์ด๋ฅผ ์ฐพ์์ค๋ค.
from nltk.stem import LancasterStemmer
stemmer = LancasterStemmer()
print(stemmer.stem('working'),stemmer.stem('works'),stemmer.stem('worked'))
print(stemmer.stem('amusing'),stemmer.stem('amuses'),stemmer.stem('amused'))
print(stemmer.stem('happier'),stemmer.stem('happiest'))
print(stemmer.stem('fancier'),stemmer.stem('fanciest'))
work ๋จ์ด๋ฅผ ์ ๋ ฅํ๋ฉด, ์งํํ, 3์ธ์นญ ๋จ์, ๊ณผ๊ฑฐํ ๋ชจ๋ ์ํ ๋จ์ด์ธ 'work'๋ฅผ ์ ๋๋ก ์ฐพ์๋ด์ง๋ง,
amuse ์ ๊ฒฝ์ฐ, 'e'๊ฐ ๋น ์ง 'amus'๋ฅผ ์ถ๋ ฅํด ๋ธ๋ค.
๋ํ ํ์ฉ์ฌ์ธ happy์ ๊ฒฝ์ฐ, ์ํ์ธ 'happy'์ 'happiest'๋ฅผ ์ ๋๋ก ์ถ๋ ฅํด ๋ด์ง๋ง,
fancy์ ๊ฒฝ์ฐ 'fant','fanciest'๋ฅผ ์ถ๋ ฅํด ๋ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด๋ฒ์๋ ๋น๊ต์ ์ ํํ WordNetLemmatizer๋ฅผ ์ด์ฉํด Lemmatization์ ํด๋ณด๋ ค๊ณ ํ๋ค.
์ผ๋ฐ์ ์ผ๋ก Lemmatization์ ๋ณด๋ค ์ ํํ ์ํ ๋จ์ด ์ถ์ถ์ ์ํด ๋จ์ด์ ํ์ฌ๋ฅผ ์ ๋ ฅํด์ค์ผํ๋ค.
from nltk.stem import WordNetLemmatizer
import nltk
nltk.download('wordnet')
lemma = WordNetLemmatizer()
print(lemma.lemmatize('amusing','v'),lemma.lemmatize('amuses','v'),lemma.lemmatize('amused','v'))
print(lemma.lemmatize('happier','a'),lemma.lemmatize('happiest','a'))
print(lemma.lemmatize('fancier','a'),lemma.lemmatize('fanciest','a'))
LancasterStemmer๋ณด๋ค ์ ํํ๊ฒ ๋จ์ด๋ฅผ ์ถ๋ ฅํด ๋ด๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'๐ Machine Learning > ํ ์คํธ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๊ฐ์ฑ๋ถ์ - ๋น์ง๋ ํ์ต (0) | 2022.02.20 |
---|---|
[Python] ๊ฐ์ฑ ๋ถ์(Sentiment Analysis) - ์ง๋ํ์ต (0) | 2022.02.19 |
[Python] ๋ด์ค ๊ทธ๋ฃน ๋ถ๋ฅ (0) | 2022.02.19 |
[Python]Bag of Words(BOW) (0) | 2022.02.18 |
ํ ์คํธ ๋ถ์(Text Analytics) (0) | 2022.02.15 |