์ด๋ฒ์ NLP ์ค ํ ์คํธ๋ง์ด๋์ ๊ดํ ์๋ฃ๋ค์ ๊ฐ์ง๊ณ ์คํฐ๋๋ฅผ ํด๋ณด๊ฒ ๋์๋ค.
์ฒซ ์ฃผ์ฐจ์๋ ๊ฐ๋จํ๊ฒ ํ ์คํธ ๋ถ์์ ๊ดํด ์์๋ณด๊ณ , ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
์์ธํ ์ฝ๋๋ค์ ๊นํ๋ธ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
1. ํ ์คํธ๋ง์ด๋, ํ ์คํธ ๋ถ์, ์์ฐ์ด ์ฒ๋ฆฌ์ ์ฐจ์ด
์์ํ๊ธฐ์ ์์ ์ ์ธ ์ฉ์ด๋ค์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ ์์ํ์.
- ํ ์คํธ๋ง์ด๋: ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๋ชจ๋ ์์
- ํ ์คํธ ๋ถ์: ์ข์ ์๋ฏธ์ ํ ์คํธ(๋ฌธ์)์ ํน์ฑ ํ์ ํ๋ ๊ฒ
- ์์ฐ์ด ์ฒ๋ฆฌ: ํ ์คํธ๋ง์ด๋์ ์ํ ํ ์คํธ ์ฒ๋ฆฌ ์์
2. ํ ์คํธ ๋ถ์์ ์ข ๋ฅ
ํ ์คํธ ๋ถ์์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค:
- ํ ์คํธ ์ ๋ณ: ์ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ํ ์คํธ๋ง ์ถ์ถ
- ํ ์คํธ ์ ๋ณด ์ถ์ถ: ํ ํ ์คํธ ๋ด์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถ
- ํ ์คํธ ์ฃผ์ ์ฐพ๊ธฐ: ๋น๋ ๋ถ์, ํ ํฝ ๋ชจ๋ธ๋ง ๋ฑ์ ํ์ฉ
- ํ ์คํธ ๋ถ๋ฅ: Logistic Regression, Deep Learning... ๋ฑ์ ์ฌ์ฉ
- ํ ์คํธ ๋ ผ์กฐ ๋ฐ ๊ด์ : ๊ฐ์ฑ๋ถ์, ์๋ฏธ ์ฐ๊ฒฐ๋ง(Semantic Network) ๋ถ์
- ํ ์คํธ ํน์ฑ ํ์ : Word Embedding
3. ํ ์คํธ ๋ถ์ ๊ณผ์
ํ ์คํธ ๋ถ์ ๊ณผ์ ์ ์์ง -> ์ ์ฒ๋ฆฌ -> ๋ถ์ -> ํ๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์์ง: ํฌ๋กค๋ง, ์คํฌ๋ํ ๋ฑ์ ํตํ ๋ฐ์ดํฐ ์์ง
- ์ ์ฒ๋ฆฌ
- Cleaning: ๋ถํ์ํ ๊ธฐํธ ์ ๊ฑฐ
- Case Conversion: ๋์๋ฌธ์ ๋ณํ
- Lemmatizing, Stemming: ๋จ์ด์ ์ํ ๋๋ ์ด๊ฐ ์ฐพ๊ธฐ
- has -> have / watched -> watch / flies -> fly
- ์์ -> ์์๋ค
- Text Tokenizing: ๋จ์ด ๋๋ ํ ํฐ ๋จ์๋ก ์๋ผ์ฃผ๊ธฐ
- Tagging: ๋จ์ด ํ์ฌ ํ๊ทธํ๊ธฐ
- Removing Stopwords: ๋ถ์ฉ์ด(Stopword) ์ ๊ฑฐํ๊ธฐ
- ๋ถ์
- ํ๊ฐ
4. ์ค์ต ์ฝ๋
1. ํ ์คํธ ์ ์ฒ๋ฆฌ
์ ๊ฐ๋ ๋ค๋ก, ํ ์คํธ๋ฅผ ์ ์ฒ๋ฆฌํ๊ณ ์๋ํด๋ผ์ฐ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
๋ฐ์ดํฐ๋ก๋ it ๋งค๊ฑฐ์ง์ธ ์์ฆ IT๋ผ๋ ๋งค๊ฑฐ์ง์ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํ์ฌ ์ฌ์ฉํ๋ค.
path = '/content/drive/MyDrive/text-mining/แแ
ญแแ
ณแทIT_2023.04.27.csv'
df = pd.read_csv(path); df

์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ฉด, ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ์ถ๋ ฅ๋์๋ค.
# ๊ฒฐ์ธก๊ฐ ๊ฐ์ ํ์ธ
df.isnull().sum()
# ๊ฒฐ์ธก ๋ฐ์ดํฐ ํ์ธ
df[df['๋ถ๋ฅ'].isnull()]
# ๊ฒฐ์ธก์น ์ ๊ฑฐ
df.dropna(inplace = True)
df.reset_index(inplace= True, drop = True)
์ดํ ์ ์ฝ๋๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ์ ๊ฒฐ์ธก๊ฐ์ ํ์ธํ๊ณ , ํด๋น ๊ฒฐ์ธก์น๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
# Text Cleaning
content_list = []
for k in range(len(df['๋ณธ๋ฌธ'])):
content = df['๋ณธ๋ฌธ'][k]
cleaned_content = re.sub(r'[^\s\w]', ' ', content) # cleaning
content_list.append(cleaned_content)
# Cleaning ๊ฒฐ๊ณผ ์ ์ฅํ๊ธฐ
df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'] = content_list; df
์ดํ, ๋ณธ๋ฌธ ํ ์คํธ๋ฅผ ๋ชจ๋ re (์ ๊ทํํ์)์ผ๋ก ์ ์ฒ๋ฆฌํ ํ, df์ ๋ฐ๋ก ์ ์ ๋ง๋ค์ด ์ ์ฅํ๋ค.

์์ ๊ฐ์ ์์ output์ด ๋์๋ค.
2. ํ ์คํธ ํ ํฐํ
# Okt ํ์ฉํ๊ธฐ
text = df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'][0]
word_list = okt.morphs(text) # morphs๋ ํ์ฌ ์์ด ๋ชจ๋ ํ ํฐ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
stem_word_list = okt.morphs(text, stem = True) # stem์ True๋ก ํ๋ฉด ๋จ์ด์ ์ํ์ผ๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
print(word_list, stem_word_list, sep = '\n')
์ดํ, ์์ ๊ฐ์ด Okt๋ฅผ ํ์ฉํ์ฌ ํ์ฌ๊ฐ ์์ด ๊ตฌ๋ถ๋ ๋จ์ด๋ค๊ณผ, ๋จ์ด์ ์ํ์ผ๋ก ๋ฐ๋์ด ๊ตฌ๋ถ๋ ๋จ์ด๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.


word_list = okt.pos(text, stem = True)
pos_list = ['Noun', 'Verb', 'Adjective']
[word for word in word_list if word[1] in pos_list]
๋ค์์ list comprehension ๊ธฐ๋ฒ์ผ๋ก pos_list ๋ด์ ์กด์ฌํ๋ ํ์ฌ๋ค๋ง์ผ๋ก ํํฐ๋งํด๋ณด์๋ค.

์ดํ, ์ ์ฒ๋ฆฌํ๋ ๋ณธ๋ฌธ๋ค์ ๋ํด ์คํ ๋ฐ ์์ ํ ํ์ฌ๋ฅผ ํ๊น ํ๊ณ , ํ์ฌ ํํฐ๋ฅผ ์ ์ฉํ์ฌ noun๊ณผ alpha ํ์ฌ๋ง ๊ณจ๋ผ๋ด๋ณด์๋ค.
ํด๋น ๋จ์ด๋ค์ word_list ๋ผ๋ ํ๋์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ค.
# ํ์ฌ๋ก ํํฐ๋งํ์ฌ ์๋ ๋ฐํ
def pos_filtering(word_list):
pos_list = ['Noun', 'Alpha']
pos_filtered_word_list = [word[0] for word in word_list if word[1] in pos_list]
return pos_filtered_word_list
# ์คํ
๋ฐ + ํ์ฌ ํ๊ทธํ๊ธฐ
df['๋ณธ๋ฌธ_POS'] = df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'].map(lambda x: okt.pos(x, stem= True))
# ํ์ฌ ํํฐ ์ ์ฉํ๊ธฐ
df['๋ณธ๋ฌธ_๋จ์ด'] = df['๋ณธ๋ฌธ_POS'].map(pos_filtering)
# ์๋ ๋ฆฌ์คํธ ๋ณํฉํ๊ธฐ
word_list = sum(df['๋ณธ๋ฌธ_๋จ์ด'], [])

์ต์ข ์ ์ผ๋ก, ์ด 1261028๊ฐ์ ๋จ์ด๊ฐ ์์๋ค.
3. ๋น๋๋ถ์
๋ง์ง๋ง์ผ๋ก๋ ๋จ์ด์ ๋น๋๋ฅผ ๋ถ์ํ๊ธฐ ์ํด CounterVectorizer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
# ๋น๋๋ถ์
c = Counter(word_list)
num = 100
# ์์ 100๊ฐ ๋จ์ด๋ง ์ถ๋ ฅ
print(c.most_common(num))
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.

๋๋ฌด ๋ง์ด ๋ฑ์ฅํ๋ ๋ฌด์๋ฏธํ ๋จ์ด๋ค์ ๋ถ์ฉ์ด๋ก ์ค์ ํ๊ณ , ๋ค์ ๋น๋๋ถ์์ ํ์ฌ ํด๋น ์๋๋ค๋ก ์๋ํด๋ผ์ฐ๋๋ฅผ ์์ฑํ๋ค.
# ๋ถ์ฉ์ด
stopwords = ['์', '๊ฒ', '์ด', '๋', '๋ฑ', '๋', '๋ฅผ', '๊ทธ', '์', '๊ฒฝ์ฐ', 'ํตํด', '์ํด', '์ผ', '๋ค๋ฅธ', '๊ฐ์ง', '๋ํ', '์', '๋ํด', '์ค', '๋ด', '๋๋ฌธ']
# ๋ถ์ฉ์ด ์ ๊ฑฐ ํ ๋น๋๋ถ์
word_list = [word for word in word_list if word[0] not in stopwords]
print(c.most_common(num))
!pip install wordcloud
from wordcloud import WordCloud
word_dict = dict(c.most_common(100)) # ๋์
๋๋ฆฌ ํํ๋ก ๋ณํ
# ์๋ํด๋ผ์ฐ๋ ์ค์ ํ๊ธฐ
wc = WordCloud(font_path = 'NanumGothic.ttf',
background_color= 'white',
width = 3000, height = 2000,
min_font_size = 10)
cloud = wc.generate_from_frequencies(word_dict) # ๋์
๋๋ฆฌ ํํ๋ก ์ ์ฅ๋์ด ์์ด์ผ ํจ
์ต์ข ์ ์ธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.

์ด๋ ๊ฒ, ํ ์คํธ๋ง์ด๋์ ์ ๋ฐ์ ์ธ ๊ฐ๋ ์ ๊ดํด ์์๋ณด๊ณ , '์์ฆ IT'๋ผ๋ ๋งค๊ฑฐ์ง์์ ํฌ๋กค๋งํ ๋ฐ์ดํฐ๋ก ํ ์คํธ ์ ์ฒ๋ฆฌ, ํ ํฐํ, ๋น๋๋ถ์ํ์ฌ ์๋ํด๋ผ์ฐ๋๊น์ง ๋ง๋ค์ด ๋ณด์๋ค.
'๐ ์คํฐ๋ > NLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Word2Vec์ ๊ดํ์ฌ] - CBOW, Skip-gram (0) | 2023.07.25 |
---|---|
[NLP-์คํฐ๋] RNN์ ๊ดํ์ฌ (1) | 2023.06.29 |
[ํ ์คํธ๋ง์ด๋] 2-2. ๋ฌธ์ ์ ์ฌ๋ - ์คํ๋ฒ ์ค ๋ค์ด๋ฒ ๋ฌธ์ ์ ์ฌ๋ ๊ตฌํ๊ธฐ (0) | 2023.06.19 |
[ํ ์คํธ๋ง์ด๋] 2-1. ํ ์คํธ ํํ๊ณผ ๋ฌธ์ ์ ์ฌ๋ (0) | 2023.06.19 |
์ด๋ฒ์ NLP ์ค ํ ์คํธ๋ง์ด๋์ ๊ดํ ์๋ฃ๋ค์ ๊ฐ์ง๊ณ ์คํฐ๋๋ฅผ ํด๋ณด๊ฒ ๋์๋ค.
์ฒซ ์ฃผ์ฐจ์๋ ๊ฐ๋จํ๊ฒ ํ ์คํธ ๋ถ์์ ๊ดํด ์์๋ณด๊ณ , ์ฝ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
์์ธํ ์ฝ๋๋ค์ ๊นํ๋ธ ์ฐธ๊ณ ํ๊ธธ ๋ฐ๋๋ค.
1. ํ ์คํธ๋ง์ด๋, ํ ์คํธ ๋ถ์, ์์ฐ์ด ์ฒ๋ฆฌ์ ์ฐจ์ด
์์ํ๊ธฐ์ ์์ ์ ์ธ ์ฉ์ด๋ค์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ณ ์์ํ์.
- ํ ์คํธ๋ง์ด๋: ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ ๋ชจ๋ ์์
- ํ ์คํธ ๋ถ์: ์ข์ ์๋ฏธ์ ํ ์คํธ(๋ฌธ์)์ ํน์ฑ ํ์ ํ๋ ๊ฒ
- ์์ฐ์ด ์ฒ๋ฆฌ: ํ ์คํธ๋ง์ด๋์ ์ํ ํ ์คํธ ์ฒ๋ฆฌ ์์
2. ํ ์คํธ ๋ถ์์ ์ข ๋ฅ
ํ ์คํธ ๋ถ์์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ๋ค:
- ํ ์คํธ ์ ๋ณ: ์ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ํ ์คํธ๋ง ์ถ์ถ
- ํ ์คํธ ์ ๋ณด ์ถ์ถ: ํ ํ ์คํธ ๋ด์์ ์ํ๋ ์ ๋ณด๋ฅผ ์ถ์ถ
- ํ ์คํธ ์ฃผ์ ์ฐพ๊ธฐ: ๋น๋ ๋ถ์, ํ ํฝ ๋ชจ๋ธ๋ง ๋ฑ์ ํ์ฉ
- ํ ์คํธ ๋ถ๋ฅ: Logistic Regression, Deep Learning... ๋ฑ์ ์ฌ์ฉ
- ํ ์คํธ ๋ ผ์กฐ ๋ฐ ๊ด์ : ๊ฐ์ฑ๋ถ์, ์๋ฏธ ์ฐ๊ฒฐ๋ง(Semantic Network) ๋ถ์
- ํ ์คํธ ํน์ฑ ํ์ : Word Embedding
3. ํ ์คํธ ๋ถ์ ๊ณผ์
ํ ์คํธ ๋ถ์ ๊ณผ์ ์ ์์ง -> ์ ์ฒ๋ฆฌ -> ๋ถ์ -> ํ๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ค.
- ์์ง: ํฌ๋กค๋ง, ์คํฌ๋ํ ๋ฑ์ ํตํ ๋ฐ์ดํฐ ์์ง
- ์ ์ฒ๋ฆฌ
- Cleaning: ๋ถํ์ํ ๊ธฐํธ ์ ๊ฑฐ
- Case Conversion: ๋์๋ฌธ์ ๋ณํ
- Lemmatizing, Stemming: ๋จ์ด์ ์ํ ๋๋ ์ด๊ฐ ์ฐพ๊ธฐ
- has -> have / watched -> watch / flies -> fly
- ์์ -> ์์๋ค
- Text Tokenizing: ๋จ์ด ๋๋ ํ ํฐ ๋จ์๋ก ์๋ผ์ฃผ๊ธฐ
- Tagging: ๋จ์ด ํ์ฌ ํ๊ทธํ๊ธฐ
- Removing Stopwords: ๋ถ์ฉ์ด(Stopword) ์ ๊ฑฐํ๊ธฐ
- ๋ถ์
- ํ๊ฐ
4. ์ค์ต ์ฝ๋
1. ํ ์คํธ ์ ์ฒ๋ฆฌ
์ ๊ฐ๋ ๋ค๋ก, ํ ์คํธ๋ฅผ ์ ์ฒ๋ฆฌํ๊ณ ์๋ํด๋ผ์ฐ๋๋ฅผ ์์ฑํด๋ณด์๋ค.
๋ฐ์ดํฐ๋ก๋ it ๋งค๊ฑฐ์ง์ธ ์์ฆ IT๋ผ๋ ๋งค๊ฑฐ์ง์ ๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํ์ฌ ์ฌ์ฉํ๋ค.
path = '/content/drive/MyDrive/text-mining/แแ
ญแแ
ณแทIT_2023.04.27.csv'
df = pd.read_csv(path); df

์ฝ๋๋ฅผ ์ถ๋ ฅํ๋ฉด, ์ ์ด๋ฏธ์ง์ ๊ฐ์ด ์ถ๋ ฅ๋์๋ค.
# ๊ฒฐ์ธก๊ฐ ๊ฐ์ ํ์ธ
df.isnull().sum()
# ๊ฒฐ์ธก ๋ฐ์ดํฐ ํ์ธ
df[df['๋ถ๋ฅ'].isnull()]
# ๊ฒฐ์ธก์น ์ ๊ฑฐ
df.dropna(inplace = True)
df.reset_index(inplace= True, drop = True)
์ดํ ์ ์ฝ๋๋ฅผ ์คํํ์ฌ ๋ฐ์ดํฐ์ ๊ฒฐ์ธก๊ฐ์ ํ์ธํ๊ณ , ํด๋น ๊ฒฐ์ธก์น๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
# Text Cleaning
content_list = []
for k in range(len(df['๋ณธ๋ฌธ'])):
content = df['๋ณธ๋ฌธ'][k]
cleaned_content = re.sub(r'[^\s\w]', ' ', content) # cleaning
content_list.append(cleaned_content)
# Cleaning ๊ฒฐ๊ณผ ์ ์ฅํ๊ธฐ
df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'] = content_list; df
์ดํ, ๋ณธ๋ฌธ ํ ์คํธ๋ฅผ ๋ชจ๋ re (์ ๊ทํํ์)์ผ๋ก ์ ์ฒ๋ฆฌํ ํ, df์ ๋ฐ๋ก ์ ์ ๋ง๋ค์ด ์ ์ฅํ๋ค.

์์ ๊ฐ์ ์์ output์ด ๋์๋ค.
2. ํ ์คํธ ํ ํฐํ
# Okt ํ์ฉํ๊ธฐ
text = df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'][0]
word_list = okt.morphs(text) # morphs๋ ํ์ฌ ์์ด ๋ชจ๋ ํ ํฐ๋ค์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
stem_word_list = okt.morphs(text, stem = True) # stem์ True๋ก ํ๋ฉด ๋จ์ด์ ์ํ์ผ๋ก ๋ณํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
print(word_list, stem_word_list, sep = '\n')
์ดํ, ์์ ๊ฐ์ด Okt๋ฅผ ํ์ฉํ์ฌ ํ์ฌ๊ฐ ์์ด ๊ตฌ๋ถ๋ ๋จ์ด๋ค๊ณผ, ๋จ์ด์ ์ํ์ผ๋ก ๋ฐ๋์ด ๊ตฌ๋ถ๋ ๋จ์ด๋ค์ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.


word_list = okt.pos(text, stem = True)
pos_list = ['Noun', 'Verb', 'Adjective']
[word for word in word_list if word[1] in pos_list]
๋ค์์ list comprehension ๊ธฐ๋ฒ์ผ๋ก pos_list ๋ด์ ์กด์ฌํ๋ ํ์ฌ๋ค๋ง์ผ๋ก ํํฐ๋งํด๋ณด์๋ค.

์ดํ, ์ ์ฒ๋ฆฌํ๋ ๋ณธ๋ฌธ๋ค์ ๋ํด ์คํ ๋ฐ ์์ ํ ํ์ฌ๋ฅผ ํ๊น ํ๊ณ , ํ์ฌ ํํฐ๋ฅผ ์ ์ฉํ์ฌ noun๊ณผ alpha ํ์ฌ๋ง ๊ณจ๋ผ๋ด๋ณด์๋ค.
ํด๋น ๋จ์ด๋ค์ word_list ๋ผ๋ ํ๋์ ๋ฆฌ์คํธ๋ก ์ ์ฅํ๋ค.
# ํ์ฌ๋ก ํํฐ๋งํ์ฌ ์๋ ๋ฐํ
def pos_filtering(word_list):
pos_list = ['Noun', 'Alpha']
pos_filtered_word_list = [word[0] for word in word_list if word[1] in pos_list]
return pos_filtered_word_list
# ์คํ
๋ฐ + ํ์ฌ ํ๊ทธํ๊ธฐ
df['๋ณธ๋ฌธ_POS'] = df['๋ณธ๋ฌธ_์ ์ฒ๋ฆฌ'].map(lambda x: okt.pos(x, stem= True))
# ํ์ฌ ํํฐ ์ ์ฉํ๊ธฐ
df['๋ณธ๋ฌธ_๋จ์ด'] = df['๋ณธ๋ฌธ_POS'].map(pos_filtering)
# ์๋ ๋ฆฌ์คํธ ๋ณํฉํ๊ธฐ
word_list = sum(df['๋ณธ๋ฌธ_๋จ์ด'], [])

์ต์ข ์ ์ผ๋ก, ์ด 1261028๊ฐ์ ๋จ์ด๊ฐ ์์๋ค.
3. ๋น๋๋ถ์
๋ง์ง๋ง์ผ๋ก๋ ๋จ์ด์ ๋น๋๋ฅผ ๋ถ์ํ๊ธฐ ์ํด CounterVectorizer ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค.
# ๋น๋๋ถ์
c = Counter(word_list)
num = 100
# ์์ 100๊ฐ ๋จ์ด๋ง ์ถ๋ ฅ
print(c.most_common(num))
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.

๋๋ฌด ๋ง์ด ๋ฑ์ฅํ๋ ๋ฌด์๋ฏธํ ๋จ์ด๋ค์ ๋ถ์ฉ์ด๋ก ์ค์ ํ๊ณ , ๋ค์ ๋น๋๋ถ์์ ํ์ฌ ํด๋น ์๋๋ค๋ก ์๋ํด๋ผ์ฐ๋๋ฅผ ์์ฑํ๋ค.
# ๋ถ์ฉ์ด
stopwords = ['์', '๊ฒ', '์ด', '๋', '๋ฑ', '๋', '๋ฅผ', '๊ทธ', '์', '๊ฒฝ์ฐ', 'ํตํด', '์ํด', '์ผ', '๋ค๋ฅธ', '๊ฐ์ง', '๋ํ', '์', '๋ํด', '์ค', '๋ด', '๋๋ฌธ']
# ๋ถ์ฉ์ด ์ ๊ฑฐ ํ ๋น๋๋ถ์
word_list = [word for word in word_list if word[0] not in stopwords]
print(c.most_common(num))
!pip install wordcloud
from wordcloud import WordCloud
word_dict = dict(c.most_common(100)) # ๋์
๋๋ฆฌ ํํ๋ก ๋ณํ
# ์๋ํด๋ผ์ฐ๋ ์ค์ ํ๊ธฐ
wc = WordCloud(font_path = 'NanumGothic.ttf',
background_color= 'white',
width = 3000, height = 2000,
min_font_size = 10)
cloud = wc.generate_from_frequencies(word_dict) # ๋์
๋๋ฆฌ ํํ๋ก ์ ์ฅ๋์ด ์์ด์ผ ํจ
์ต์ข ์ ์ธ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์๋ค.

์ด๋ ๊ฒ, ํ ์คํธ๋ง์ด๋์ ์ ๋ฐ์ ์ธ ๊ฐ๋ ์ ๊ดํด ์์๋ณด๊ณ , '์์ฆ IT'๋ผ๋ ๋งค๊ฑฐ์ง์์ ํฌ๋กค๋งํ ๋ฐ์ดํฐ๋ก ํ ์คํธ ์ ์ฒ๋ฆฌ, ํ ํฐํ, ๋น๋๋ถ์ํ์ฌ ์๋ํด๋ผ์ฐ๋๊น์ง ๋ง๋ค์ด ๋ณด์๋ค.
'๐ ์คํฐ๋ > NLP' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Word2Vec์ ๊ดํ์ฌ] - CBOW, Skip-gram (0) | 2023.07.25 |
---|---|
[NLP-์คํฐ๋] RNN์ ๊ดํ์ฌ (1) | 2023.06.29 |
[ํ ์คํธ๋ง์ด๋] 2-2. ๋ฌธ์ ์ ์ฌ๋ - ์คํ๋ฒ ์ค ๋ค์ด๋ฒ ๋ฌธ์ ์ ์ฌ๋ ๊ตฌํ๊ธฐ (0) | 2023.06.19 |
[ํ ์คํธ๋ง์ด๋] 2-1. ํ ์คํธ ํํ๊ณผ ๋ฌธ์ ์ ์ฌ๋ (0) | 2023.06.19 |