logo

[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
  • 문서 단어 행렬을 전치하면 단어 문서 행렬(행이 단어, 열이 문서)
Previous
토큰 분류