TensorFlow

TensorFlow 기초 33 - sklearn이 제공하는 자연어 특징 추출 : 문자열을 수치 벡터화

코딩탕탕 2022. 12. 13. 10:35

 

CountVectorizer

sklearn이 제공하는 자연어 특징 추출 : 문자열을 수치 벡터화
각 텍스트에서 단어 출현 횟수를 카운팅하는 방법으로 CountVectorizer

 

TfidfVectorizer

TF : 특정 단어가 하나의 문장 안에서 등장하는 횟수
DF : 특정 단어가 여러 문장에 등장하는 횟수
IDF : DF에 역수를 취함
# TF-IDF : 하나의 문장 안에서 자주 나오는 단어에 대해 가중치를 부여. 여러 문장에서 자주 등장하는 단어의 경우에는 패널티를 주는 방법

 

# sklearn이 제공하는 자연어 특징 추출 : 문자열을 수치 벡터화
# 각 텍스트에서 단어 출현 횟수를 카운팅하는 방법으로 CountVectorizer : 수치 벡터화(BOW)

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
content = ['How to format my hard disk', 'Hard disk format format problems']

# CountVectorizer 연습
count_vec = CountVectorizer(analyzer='word', min_df=1) # analyzer='char'
print(count_vec)

tran = count_vec.fit_transform(raw_documents=content) # token 처리 후 벡터화
print(tran)
print(count_vec.get_feature_names_out()) # <== 사전순으로 인덱싱
# ['disk' 'format' 'hard' 'how' 'my' 'problems' 'to'] <== BOW 벡터
#    0        1       2     3     4       5       6   <== 사전순으로 인덱싱
print(tran.toarray()) # 의미 있는 단어를 알기에 문제가 있다. 단순히 단어들이 몇 번 나왔는지만 알 수 있다.

print('-------')
# TfidfVectorizer
# TF : 특정 단어가 하나의 문장 안에서 등장하는 횟수
# DF : 특정 단어가 여러 문장에 등장하는 횟수
# IDF : DF에 역수를 취함
# TF-IDF : 하나의 문장 안에서 자주 나오는 단어에 대해 가중치를 부여. 여러 문장에서 자주 등장하는 단어의 경우에는 패널티를 주는 방법

tfidf_vec = TfidfVectorizer(analyzer='word', min_df=1)
tran_idf = tfidf_vec.fit_transform(raw_documents=content) # token 처리 후 벡터화
print(tran_idf)
print(tfidf_vec.get_feature_names_out())
print(tran_idf.toarray())


<console>
CountVectorizer()
  (0, 3)	1
  (0, 6)	1
  (0, 1)	1
  (0, 4)	1
  (0, 2)	1
  (0, 0)	1
  (1, 1)	2
  (1, 2)	1
  (1, 0)	1
  (1, 5)	1
['disk' 'format' 'hard' 'how' 'my' 'problems' 'to']
[[1 1 1 1 1 0 1]
 [1 2 1 0 0 1 0]]
-------
  (0, 0)	0.3347122780719073
  (0, 2)	0.3347122780719073
  (0, 4)	0.4704264280854632
  (0, 1)	0.3347122780719073
  (0, 6)	0.4704264280854632
  (0, 3)	0.4704264280854632
  (1, 5)	0.4976748316029239
  (1, 0)	0.3540997415957358
  (1, 2)	0.3540997415957358
  (1, 1)	0.7081994831914716
['disk' 'format' 'hard' 'how' 'my' 'problems' 'to']
[[0.33471228 0.33471228 0.33471228 0.47042643 0.47042643 0.
  0.47042643]
 [0.35409974 0.70819948 0.35409974 0.         0.         0.49767483
  0.        ]]