[python] Text Similarity

소개

텍스트 유사성 분석은 두 개 이상의 문서 간의 유사성을 측정하는 방법입니다. 이 기술은 정보 검색, 자연어 처리, 추천 시스템 등 다양한 분야에서 활용됩니다. 이번 글에서는 Python을 사용하여 텍스트 유사성을 분석하는 다양한 방법을 알아보겠습니다.

텍스트 전처리

먼저, 텍스트를 분석하기 전에 전처리가 필요합니다. 텍스트를 소문자로 변환하고, 구두점 및 특수 문자를 제거하며, 불용어(stopwords)를 제거하는 등의 과정이 필요합니다.

import re
import string
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import PorterStemmer

def preprocess_text(text):
    text = text.lower()  # 소문자로 변환
    text = re.sub(r'\d+', '', text)  # 숫자 제거
    text = text.translate(str.maketrans('', '', string.punctuation))  # 구두점 제거
    text = ' '.join([word for word in word_tokenize(text) if word not in stopwords.words('english')])  # 불용어 제거
    return text

단어 임베딩

텍스트를 수치화하여 벡터화하는 과정이 필요합니다. 대표적인 방법인 Word2Vec, GloVe, FastText 등의 임베딩 기술을 이용하여 각 단어를 벡터로 표현합니다.

from gensim.models import Word2Vec

# 데이터로부터 Word2Vec 모델 생성
model = Word2Vec(data, min_count=1)

유사성 측정

임베딩된 단어 벡터를 이용하여 두 문서 간의 유사성을 측정할 수 있습니다. 코사인 유사도, 자카드 유사도, 유클리드 거리 등의 측정 방법을 사용할 수 있습니다.

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# 두 벡터 간의 코사인 유사도 계산
def cosine_similarity(vec1, vec2):
    return np.dot(vec1, vec2) / (np.linalg.norm(vec1) * np.linalg.norm(vec2))

결론

텍스트 유사성 분석은 다양한 방법을 통해 문서 간의 관련성을 파악할 수 있습니다. 이를 통해 정보 검색, 추천 시스템 등에서 유용하게 활용될 수 있습니다.

참고 자료