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

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