'Bow'에 해당하는 글 1건

Bow(Bag of Words) 는 가방 속의 단어를 무작위로 뽑는 것처럼, 단어의 등장 순서를 고려하지 않는 빈도수(frequency) 기반의 단어 표현 방법이다. 빈도수로 유사도를 구하고 그에 따라 분류하는데 사용될 수 있다. 또한 서로 다른 문서들의 Bow 를 결합한 표현 방법을 문서 단어 행렬(DTM: Document-Term Matrix / TDM) 이라고 하는데, 원-핫 벡터와 같이 단어 집합을 줄이기 위해 불용어 처리가 중요하며, 정작 중요한 단어에 대해서 가중치를 주지 못하는 단점이 있다.


Bow 생성 과정은 단어 토큰화, 중복제거, 인덱스 부여, 빈도수 벡터 생성으로 만들 수 있다.


from konlpy.tag import Okt
import re
 
okt = Okt()
text = "정부가 발표하는 물가상승률과 소비자가 느끼는 물가상승률은 다르다."
token = re.sub("(\.)""", text)  # 기호제거
token = okt.morphs(token)
 
word2index = {}
bow = []
for voca in token:
    if voca not in word2index.keys():
        word2index[voca] = len(word2index)
        bow.insert(len(word2index) - 11)
    else:
        index = word2index[voca]
        bow[index] += 1
 
print(word2index)  # {'정부': 0, '가': 1, '발표': 2, '하는': 3, '물가상승률': 4, '과': 5, '소비자': 6, '느끼는': 7, '은': 8, '다르다': 9}
print(bow)  # [1, 2, 1, 1, 2, 1, 1, 1, 1, 1]
cs



CountVectorizer 로 Bow 만들기


from sklearn.feature_extraction.text import CountVectorizer
 
corpus = ['you know I want your love. because I love you.']
vector = CountVectorizer()
 
print(vector.fit_transform(corpus).toarray())  # [[1 1 2 1 2 1]]
print(vector.vocabulary_)  # {'you': 4, 'know': 1, 'want': 3, 'your': 5, 'love': 2, 'because': 0}
cs



CountVectorizer 에 불용어 사용하기

# 불용어 사용자 정의
vector = CountVectorizer(stop_words=["the""a""an""is""not"])
 
# CountVectorizer 영문 불용어 사용
vector = CountVectorizer(stop_words="english")
 
# NLTK 영문 불용어 사용
from nltk.corpus import stopwords
sw = stopwords.words("english")
vector = CountVectorizer(stop_words = sw)
cs




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,