[text-mining] 문서 벡터와 단어 벡터
문서 벡터와 단어 벡터
- 문서 벡터
- 문서 단어 행렬의 행(row)
- 문서를 표현
- 단어 벡터
- 문서 단어 행렬의 열
- 단어를 표현
문서 벡터
- 비슷한 문서/단어들은 그 값도 비슷할 것
- 문제: "비슷함"을 어떻게 계산할 것인가?
명사 추출 함수
!pip install kiwipiepy
import kiwipiepy
kiwi = kiwipiepy.Kiwi()
def extract_nouns(text):
for token in kiwi.tokenize(text):
if token.tag in {'NNG', 'NNP'}:
yield token.form
샴푸 특허 데이터
# 데이터
import pandas as pd
df = pd.read_excel('patents.xlsx')
# 문서 단어 행렬
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(tokenizer=extract_nouns, min_df=10)
dtm = cv.fit_transform(df.abstract)
# 문서 단어 행렬의 모양 보기: 행(문서)의 개수, 열(단어)의 개수
dtm.shape
고빈도 단어 보기
word_count = pd.DataFrame({
'word': cv.get_feature_names_out(),
'count': dtm.sum(axis=0).flat
})
word_count.sort_values('count', ascending=False).head(20)
문서 벡터
- 0번 문서 벡터 보기
dtm[0].toarray()
- dtm[0] 대신 dtm[0, :]이라고 써도 됨 (, :은 모든 열을 가리킴)
- 희소 행렬이므로 압축되어 있음 → .toarray() 을 붙이면 압축이 풀림
단어 벡터
# 단어 목록(.index 메소드를 쓰기 위해 list 자료형으로 변환)
words = cv.get_feature_names_out().tolist()
# 단어 벡터
word_vectors = dtm.T
# 모발의 단어 번호 찾기
j = words.index('모발')
# 모발의 단어 벡터
word_vectors[j].toarray()
전치 행렬 transpose matrix
- 행렬에서 행 ↔ 열을 뒤집는 것
dtm.T
- 문서 단어 행렬을 전치하면 단어 문서 행렬(행이 단어, 열이 문서)