더북(TheBook)

문서의 단어들을 행렬로 만들면 표 10-10과 같습니다.

 

구분

나는

과일

채소

좋아합니다.

싫어합니다.

문서 1

1

1

1

1

0

문서 2

1

0

1

0

1

문서 3

2

1

1

1

1

표 10-10 | 코사인 예제 테이블

 

NumPy를 이용해서 문서의 유사도를 구하면 다음과 같습니다.

 

In [55]:

# NumPy 라이브러리를 호출하고 코사인 공식을 적용하려고
# 내적(dot)과 벡터의 크기(norm)를 호출합니다
# 또 공식을 적용할 수 있는 함수(def cos_sim())를 생성합니다
from numpy import dot
from numpy.linalg import norm
import numpy as np

def cos_sim(A, B):
    return dot(A, B)/(norm(A)*norm(B))

# 표 10-10의 행렬을 배열로 저장합니다
doc1 = np.array([1, 1, 1, 1, 0])
doc2 = np.array([1, 0, 1, 0, 1])
doc3 = np.array([2, 1, 1, 1, 1])

# 코사인 함수에 배열 값을 적용한 후 유사도 정도를 출력합니다
print(cos_sim(doc1, doc2)) # 문서 1과 문서 2의 코사인 유사도
print(cos_sim(doc1, doc3)) # 문서 1과 문서 3의 코사인 유사도
print(cos_sim(doc2, doc3)) # 문서 2와 문서 3의 코사인 유사도

0.5773502691896258

0.8838834764831843

0.8164965809277259

 

따라서 문서 1과 문서 3의 유사도가 가장 높습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.