📊 단어 빈도 분석


📌 단어 빈도 분석이란?

  • 정의
    - Sentences에서 각 단어들이 나온 개수를 확인하는 분석 방법

  • 종류
    - countVectorizer : 의미있는 단어 파악 불가
    - TF-IDF : 의미있는 단어 파악 가능


📌 Count Vectorizer

  • 정의
    - 단순 단어들의 빈도수를 추출하여 벡터화하는 작업
    - 단어의 의미 파악이 불가능하다.


📌 TF-IDF Vectorizer

  • 정의
    - TF : 특정 단어가 하나의 문장 안에서 등장하는 횟수
    - DF : 특정 단어가 여러 문장에 등장하는 횟수
    - IDF : DF에 역수를 취함

  • TF-IDF
    - 하나의 문장 안에서 자주 나오는 단어에 대해 가중치를 줌
    - 여러 문장에서 자주 등장하는 단어의 경우에는 패널티를 부여

  • 특징
    - 여러 문장에서 많이 나오는 단어인 StopWord(불용어)를 파악할 수 있다.
    - 즉, 특정 단어에 대한 의미 파악(문서 설명력, 분별력)이 가능









📊 단어 빈도 분석 실습


📌 형태소 분석 후 빈도 분석

1. 라이브러리 Import

# 형태소 분석
from konlpy.tag import Okt

# 단어 빈도 분석(TF-IDF)
from sklearn.feature_extraction.text import TfidfVectorizer

2. 한글 데이터 준비

text_data = ['나는 배 고프다.', '오늘 점심 뭐 먹지?', '내일 공부 해야겠다.', '점심 먹고 공부 해야지!']

3. 형태소 분석

# 형태소 분석 객체 선언
okt = Okt()

# 문장별 명사, 형용사, 동사만 저장할 리스트
my_words = []

for text in text_data:
  text_pos = []
  for word in okt.pos(text, stem=True):
    if word[1] in ['Noun', 'Adjective', 'Verb']:
      text_pos.append(word[0])
  text_pos = ' '.join(text_pos)
  my_words.append(text_pos)

print(my_words)
# ['나 배 고프다', '오늘 점심 뭐 먹다', '내일 공부 하다', '점심 먹다 공부 하다']

4. 단어 빈도 분석(TF-IDF) 수행
- min_df : 단어 최소 허용 빈도수
- max_df : 단어 최대 허용 빈도수
- stop_words : 불용어 지정
- ngram_range : 특정 단어 기준으로 주위 단어를 몇개씩 묶을지 지정

# TF-IDF 벡터 모듈 선언
tf_idf = TfidfVectorizer(
    analyzer='word',
    min_df=1,
    max_df=5,
    stop_words=['오늘', '내일'],
    ngram_range=(1, 1)
)

# TF-IDF 벡터 모듈 학습
tf_idf_vec = tf_idf.fit_transform(raw_documents=my_words)
print(tf_idf_vec.toarray())
print(tf_idf.get_feature_names_out())
# [[1.         0.         0.         0.         0.         0.         0.]
#  [0.         0.         0.         0.52640543 0.66767854 0.52640543 0.]
#  [0.         0.52640543 0.66767854 0.         0.         0.         0.52640543]
#  [0.         0.5        0.         0.5        0.         0.5        0.5]]
# ['고프다' '공부' '내일' '먹다' '오늘' '점심' '하다']


profile
데이터 사이언티스트를 목표로 하는 개발자

0개의 댓글