문서의 단어들을 행렬로 만들면 표 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의 유사도가 가장 높습니다.