Programming/NLP
[NLP] 텍스트 카테고리 분류하는 방법
armmy
2023. 3. 29. 16:26
728x90
파이썬으로 텍스트 카테고리 분류해보기
1. 기본 세팅
데이터는 https://github.com/e9t/nsmc에서 받을 수 있습니다.
(위 데이터는 네이버 영화 평점 데이터입니다.)
import pandas as pd
import numpy as np
from tqdm import tqdm
# 시각화
import matplotlib.pyplot as plt
df = pd.read_csv('/content/ratings_train.txt',sep='\t')
# 데이터 양이 너무 많아 200행까지만 실행해보았습니다.
df=df.iloc[0:200,0:2]
2. 긍정/부정/중립의 키워드 지정 후 카테고리화 하였습니다.
긍정과 부정의 키워드는 제가 임의로 작성한 키워드 입니다.
# 긍정 키워드
pos_words = '좋아 좋아요 좋은 좋았 짱 정말 재미 재밋 재밌 재미있다 추천 사랑 감성 또 마음 맘 멋진 멋지다 웃기다 웃김 기다렸다 절대 센스 최고 열정'
# 부정 키워드
neg_words = '허접 짜증 재미없다 별로다 별로 안본다 안볼듯 없다 낭비 아깝다 아까움 노잼 발연기 가볍'
positive_words = pos_words.split(' ')
negative_words = neg_words.split(' ')
# 긍정 채팅 분류
for i in tqdm(df.index):
for word in positive_words:
if word in df.loc[i, 'document']:
df.loc[i, '감정분석'] = '긍정'
# 부정 채팅 분류
for i in tqdm(df.index):
if df.loc[i, '감정분석']!='긍정':
for word in negative_words:
if word in df.loc[i, 'document']:
df.loc[i, '감정분석'] = '부정'
# 중립
df['감정분석'] = df['감정분석'].fillna('중립')
df.head(50)
3. 긍정/부정/중립의 개수 확인
df2 = df['감정분석'].value_counts()
df2
4. 긍정/부정/중립의 비율 시각화로 표현해보았습니다.
import matplotlib.pyplot as plt
plt.rc('font',family='NanumBarunGothic', size=20)
plt.figure(figsize=(8, 8))
ratio = df2.values
labels = df2.index
colors=['#ff9999', '#ffc000', '#8fd9b6']
wedgeprops = {'width': 0.7,'linewidth': 2}
explode = [0.05, 0.05, 0.05]
plt.pie(ratio, autopct='%.1f%%',startangle=90, counterclock=False, labels=labels, colors=colors, explode=explode)
plt.show()
* 긍정과 부정의 단어가 명확하게 나누어진 것이 아니여서 중립이 비율이 높게 나온 거 같습니다.