텍스트 마이닝_text mining
※ 텍스트 마이닝
– 비정형의 텍스트 데이터로부터 패턴을 찾아내어 의미 있는 정보를 추출하는 분석 과정 또는 기법
– 데이터 마이닝과 자연어 처리, 정보 검색 등의 분야가 결합된 분석 기법을 사용
– 텍스트 마이닝의 프로세스
텍스트 전처리 → 특성 벡터화 → 머신러닝 모델 구축 및 학습/평가 프로세스 수행
» 텍스트 전처리에는 토큰화, 불용어 제거, 표제어 추출, 형태소 분석 등의 작업이 포함
※ 특성 벡터화와 특성 추출
– 머신러닝 알고리즘으로 분석하기 위해서는 텍스트를 구성하는 단어 기반의 특성 추출을 하고 이를 숫자형 값인 벡터 값 으로 표현해야 함
– 특성 벡터화의 대표적인 방법으로 BoW와 Word2ve가 있음
– BOW : 순서는 무시한 채 빈도만 고려하여 단어가 얼마나 자주 등장하는지로 특성 벡터를 만드는 방법
- 카운트 기반 벡터화와 TF -IDF 기반 벡터화 방식이 있음
예시1) 감성 분석 참고 프로그램
text="난 우리영화를 love 사랑합니다....^^"
import re
newstr=re.sub(r'[^ ㄱ-ㅣ가-힣]+', " ", text)
print(newstr)
from konlpy.tag import Okt #한국어 정보처리를 위한 파이썬 패키지
okt = Okt()
tokens = okt.morphs(newstr)
print(tokens)# ['난', '우리', '영화', '를', '사랑', '합니다']
#********* 명사 찾기 okt.noun()
no=okt.nouns(newstr)
print(no) #['난', '우리', '영화', '사랑']
(1) 카운터 기반 벡터화
- 출현빈도가 높을수록 중용한 단어로 다루어짐
- 문서 d에 등장한 단어 t의 횟수는 tf(t,d)로 표현
(2) TF-IDF 기반 벡터화
– 특정 문서에 많이 나타나는 단어는 해당 문서의 단어 벡터에 가중치를 높임
– 모든 문서에 많이 나타나는 단어는 범용적으로 사용하는 단어로 취급하여 가중치를 낮추는 방식
– (역문서 빈도) idf(t,d)
– df(d,t)는 단어 t가 포함된 문서 d의 개수
★ TF-IDF 가중치는 다른 문서에 적게 나오고 자기 문서에 많이 나오면 높다.
그러나 자기 문서에 많이나오나 다른 문서에도 많이 나오면 가중치는 낮다.
import pandas as pd # 데이터프레임 사용을 위해
from math import log # IDF 계산을 위해
docs = [
'사과',
'바나나',
'사과 바나나 쥬스',
'바나나 바나나 과일',
'수박'
]
vocab = list(set(w for doc in docs for w in doc.split()))
vocab.sort()
N = len(docs) # 총 문서의 수
def tf(t, d):
return d.count(t) #문서 d의 단어 t 갯수
def idf(t):
df = 0
for doc in docs:
df += t in doc
return log(N/(df + 1))
def tfidf(t, d):
return tf(t,d)* idf(t)
##################################################################
result = []
for i in range(N): # 각 문서에 대해서 아래 명령을 수행
result.append([])
d = docs[i]
for j in range(len(vocab)):
t = vocab[j]
result[-1].append(tf(t, d))
tf_ = pd.DataFrame(result, columns = vocab)
tf_
##################################################################
result = []
for j in range(len(vocab)):
t = vocab[j]
result.append(idf(t))
idf_ = pd.DataFrame(result, index = vocab, columns = ["IDF"])
idf_
##################################################################
result = []
for i in range(N):
result.append([])
d = docs[i]
for j in range(len(vocab)):
t = vocab[j]
result[-1].append(tfidf(t,d))
tfidf_ = pd.DataFrame(result, columns = vocab)
tfidf_
※ [감성 분석 + 토픽 모델링] 영화 리뷰 데이터로 감성 예측하기
(1) 데이터 수집
- ratings.txt 파일: 네이버 영화 페이지에서 리뷰를 크롤링하여 수집한 200K 용량의 데이터 파일
- 중립적인 평점인 5~8점은 제외하고 1~4점을 부정 감성 0으로, 9~10점을 긍정 감성 1로 표시
(2) 데이터 준비 및 탐색
- pandas 버전 확인 후 훈련용 데이터 준비
- 한글 외의 문자 제거하기
- 평가용 데이터 준비
(3) 분석 모델 구축
(4) 감성 모델 구축
(5) 평가용 데이터를 이용하여 모델 정확도 확인
(6) 새로운 텍스트로 감성 예측 확인