[파이썬] 유사한 문서 검색 및 추천 시스템

유사한 문서를 검색하고 추천하는 시스템은 정보 탐색과 추천 분야의 중요한 기술입니다. 이러한 시스템은 사용자가 특정 문서를 찾는 데 도움을 주거나, 관련 문서를 추천하여 사용자 경험을 향상시킬 수 있습니다. 이 글에서는 Python을 사용하여 유사한 문서를 검색하고 추천하는 시스템을 구축하는 방법을 알아보겠습니다.

1. 문서 유사도 계산

문서 유사도는 두 개의 문서가 얼마나 유사한지를 측정하는 지표입니다. 다양한 방법이 있지만, 여기에서는 코사인 유사도(cosine similarity)를 사용해보겠습니다. 코사인 유사도는 두 벡터 간의 각도를 측정하여 유사도를 계산하는 방법입니다.

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# 문서 리스트
documents = ["문서1 내용", "문서2 내용", "문서3 내용"]

# TF-IDF 벡터화
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# 코사인 유사도 계산
similarity_matrix = cosine_similarity(tfidf_matrix)

2. 유사한 문서 검색

유사한 문서를 검색하기 위해 입력 문서와 유사도를 계산하여 가장 유사한 문서를 찾을 수 있습니다.

# 입력 문서
query = "검색할 문서 내용"

# 입력 문서 벡터화
query_vector = vectorizer.transform([query])

# 입력 문서와 유사한 문서 검색
scores = cosine_similarity(query_vector, tfidf_matrix)

# 가장 유사한 문서 찾기
most_similar_doc_index = np.argmax(scores)
most_similar_doc = documents[most_similar_doc_index]

3. 문서 추천

문서 추천은 사용자에게 관련된 문서를 추천하는 기능입니다. 이를 위해 사용자의 선호도를 기반으로 유사한 문서를 추출할 수 있습니다. 예를 들어, 사용자가 특정 문서를 좋아한다면 그와 유사한 다른 문서를 추천할 수 있습니다.

# 선호하는 문서
liked_document = "좋아하는 문서 내용"

# 선호하는 문서 벡터화
liked_vector = vectorizer.transform([liked_document])

# 선호하는 문서와 유사한 문서 검색
scores = cosine_similarity(liked_vector, tfidf_matrix)

# 유사한 문서 추천
similar_docs_indices = np.argsort(scores)[0][-5:]  # 상위 5개의 유사한 문서
similar_docs = [documents[i] for i in similar_docs_indices]

위의 예시 코드를 통해 코사인 유사도를 활용하여 유사한 문서를 검색하고 추천하는 기능을 구현할 수 있습니다. 이를 통해 사용자에게 더 나은 정보 탐색 경험을 제공할 수 있습니다.