오늘은 NLP, 챗봇 학습을 위한 텍스트 데이터 텍스트 마이닝을 진행하겠습니다
1. 데이터 준비
pip install Korpora
from import Korpora import Korpora
review_corpus = Korpora.load('nsmc')
nsmc는 네이버 영화 리뷰 데이터로 텍스트 마이닝 실습을 위해 사용해보겠습니다
데이터는 15만개 리뷰 데이터로 레이블은 긍정, 부정 입니다
2. 데이터 확인
import pandas as pd
review_corpus_df = pd.DataFrame()
review_corpus_df['doc'] = review_corpus.train.get_all_texts()
review_corpus_df['label'] = review_corpus.train.get_all_labels()
review_corpus_df.head()
비어있는 데이터 프레임 review_corpus_df를 만든 후 글과 레이블을 추가해서 확인하는 코드입니다
리뷰 글과 부정 긍정을 0,1로 확인할 수 있습니다
3. 워드클라우드 시각화
pip install wordcloud
from wordcloud import WordCloud, STOPWORDS
from PIL import Image
import numpy as np
heart_mask = np.array( Image.open('heart.jpg') )
stopwords = set(STOPWORDS)
# 워드 클라우드
wc = WordCloud(
font_path = '/usr/share/fonts/truetype/nanum/NanumBarunGothic.ttf',
max_words = 300,
stopwords = stopwords,
mask = heart_mask,
background_color='white'
)
wc_gen = wc.generate( review_posi_text )
# 시각화
plt.figure( figsize=(7,7) )
plt.imshow( wc_gen )
plt.axis('off')
plt.show()
heart 사진에 워드클라우드를 만드는 코드입니다
stopwords 불용어를 배제해줍니다
wc wordcloud로 font 설정, 시각화할 빈도개수 300개, 불용어, heart 그림에 시각화 하여 워드클라우드를 만들었습니다
wc_gen은 빈도 서열입니다
마지막으로 plot으로 시각화 한 이미지입니다
4. 말뭉치 분절
from konlpy.tag import Mecab
tokenizer = Mecab()
review_corpus_df.doc = review_corpus_df.doc.apply(
lambda x: ' '.join(tokenizer.morphs(x)) )
Mecab으로 불필요한 품사 제거 및 재조립을 진행합니다
5. 백터화
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(min_df=1, decode_error='ignore')
X = vectorizer.fit_transform( review_corpus_df.doc )
데이터 백터화를 통해 len()로 확인 해보면 50991개의 토큰으로 백터화 되었음을 확인할 수 있습니다
6. 유사도 검사
def check_answer_sim( user_sentnece='' ):
if not user_sentnece:
return '입력 필요'
chatbot_df['score'] = 0
# 1. 입력 백터화
user_sentnece_vec = vectorizer.transform( [ my_sentence_change(user_sentnece) ] ).toarray()[0]
# 3. 유사도 score 계산
chatbot_df['score'] = chatbot_df.Q2_vec.apply( lambda x: cos_sim(user_sentnece_vec, x) )
#print(chatbot_df['score'])
# 4. 유사 문장 return
return chatbot_df.loc[ chatbot_df['score'].idxmax() ]['A']
챗봇에서 주로 사용되는 방법이지만 문장 -> 분절 -> 백터화를 통해 유사도를 측정하여 비슷한 문장을 찾을 수 있으며 이를 통해 결론을 도출할 수 있습니다
max를 사용하면 챗봇의 형태가 되며 리뷰에서 max값 여러개를 통해 리뷰의 성격을 파악하여 결론을 도출할 수 있으며 또한 백터화된 토큰과 워드클라우드를 통해 리뷰 성격 파악을 할 수 있습니다
'Python > 데이터 분석' 카테고리의 다른 글
데이터 분석 텍스트 마이닝 정규표현식 python [2편] (0) | 2024.02.06 |
---|---|
데이터 분석 텍스트 마이닝 정규표현식 python [1편] (0) | 2024.02.02 |
데이터 분석 matplotlib, seaborn 시각화 (0) | 2024.01.30 |
데이터 분석 실습 예제 음원 데이터 준비 (0) | 2024.01.30 |
데이터 분석 pandas (2) | 2024.01.30 |