Colab으로 하루에 하나씩 딥러닝

한국어 영화 리뷰 카운트 벡터 변환 본문

딥러닝_프로젝트

한국어 영화 리뷰 카운트 벡터 변환

Elleik 2022. 12. 20. 12:15
728x90
### 데이터 다운로드

!git clone https://github.com/wikibook/textmining.git

git clone을 통해 데이터 다운로드

### 데이터 확인하기

import pandas as pd
df = pd.read_csv("/content/textmining/data/daum_movie_review.csv")
df.head(10)

다음 영화 리뷰 데이터 확인

### review 항목을 바탕으로 카운트 벡터 생성

from sklearn.feature_extraction.text import CountVectorizer
daum_cv = CountVectorizer(max_features=1000)

# review를 이용해 count vector를 학습하고, 변환
daum_DTM = daum_cv.fit_transform(df.review)

print(daum_cv.get_feature_names_out()[:100])  # count vector에 사용된 feature 이름을 반환

의미적으로 같은 단어로 취급해야 할 문제가 발생

### KoNLPy 형태소 분석기를 사용하여 분석

!pip install konlpy

from konlpy .tag import Okt
twitter_tag = Okt()
print('전체 형태소 결과: ', twitter_tag.morphs(df.review[1]))
print('*'*50)
print('명사만 추출: ', twitter_tag.nouns(df.review[1]))
print('*'*50)
print('품사 태깅 결과: ', twitter_tag.pos(df.review[1]))
print('*'*50)

특성 집합에 포함할 파라미터를 파악

### 명사, 동사, 형용사를 선택하여 토크나이저 함수 제작 후 테스트

def my_tokenizer(doc):
  return [
      token
      for token, pos in twitter_tag.pos(doc)
      if pos in ['Noun', 'Verb','Adjective']
  ]

print('나만의 토크나이저 결과: ', my_tokenizer(df.review[1]))

괜찮은 결과가 나와 해당 함수를 계속 사용

### tokenizer 매개변수에 my_tokenizer 함수를 지정해 객체를 생성한 후에, fit_transform으로 카운트 백터를 생성

from sklearn.feature_extraction.text import CountVectorizer

# 토크나이저와 특성의 최대 개수를 지정
# 명사만 추출하고 싶은 경우에는 tokenizer에 'twitter_tag.nouns'를 바로 지정해도 됨
daum_cv = CountVectorizer(max_features=1000, tokenizer=my_tokenizer)

# review를 이용해 count vector를 학습하고, 변환
daum_DTM = daum_cv.fit_transform(df.review)

print(daum_cv.get_feature_names_out()[:100])  # count vector에 사용된 feature 이름을 반환

이전의 문제점이 해결됨

### 희소 행렬에서 값이 있는 비율 확인

print(repr(daum_DTM))
print(110800/(14725*1000))

비율이 7.5%밖에 되지 않음

참고: 박상언, 『파이썬 텍스트 마이닝 완벽 가이드』, 위키북스(2022)

'딥러닝_프로젝트' 카테고리의 다른 글

20 뉴스그룹 데이터 준비 및 특성 추출  (0) 2022.12.22