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. ]]