Gensim을 활용하여 텍스트 기반 검색 시스템 개발하기

이제는 많은 기업과 조직에서 텍스트 데이터를 다루고 있습니다. 이러한 텍스트 데이터에서 원하는 정보를 빠르고 효율적으로 검색하기 위해서는 텍스트 검색 시스템을 개발해야 합니다. 이번 블로그 포스트에서는 Gensim 라이브러리를 활용하여 텍스트 기반 검색 시스템을 개발하는 방법에 대해 알아보겠습니다.

Gensim이란?

Gensim은 Python에서 자연어 처리를 위한 도구를 제공하는 라이브러리입니다. 이 라이브러리는 토픽 모델링, 문서 유사도 측정, 텍스트 전처리 등의 기능을 제공하여 텍스트 데이터를 분석하는 데에 유용합니다.

텍스트 데이터 전처리하기

텍스트 검색 시스템을 개발하기 위해서는 먼저 텍스트 데이터를 전처리해야 합니다. 이 단계에서는 텍스트 데이터를 토큰화하고, 불용어를 제거하며, 단어를 원형화하는 등의 작업을 수행합니다. Gensim은 이러한 텍스트 전처리 작업을 손쉽게 수행할 수 있는 기능을 제공합니다.

from gensim.utils import simple_preprocess
from gensim.parsing.preprocessing import remove_stopwords, stem_text

def preprocess_text(data):
    result = []
    for sentence in data:
        tokens = simple_preprocess(sentence)
        tokens = [token for token in tokens if token not in stop_words]
        tokens = [stem_text(token) for token in tokens]
        result.append(tokens)
    return result

위의 코드는 텍스트 데이터를 전처리하는 함수입니다. simple_preprocess()는 텍스트를 토큰화한 뒤 간단한 전처리 작업을 수행하고, remove_stopwords()는 불용어를 제거하며, stem_text()는 단어를 원형화합니다.

문서 벡터화하기

텍스트 데이터를 전처리한 후에는 문서를 벡터로 표현해야 합니다. 벡터화된 문서는 단어의 빈도수에 기반하여 표현됩니다. 이러한 벡터 표현을 사용하여 문서 간의 유사도를 측정하고, 텍스트 기반 검색 시스템을 개발할 수 있습니다.

from gensim import corpora
from gensim.models import TfidfModel

def vectorize_documents(documents):
    dictionary = corpora.Dictionary(documents)
    corpus = [dictionary.doc2bow(doc) for doc in documents]
    tfidf = TfidfModel(corpus)
    corpus_tfidf = tfidf[corpus]
    return corpus_tfidf

위의 코드는 문서를 벡터로 표현하는 함수입니다. 먼저, corpora.Dictionary()를 사용하여 문서에서 사용된 단어들을 저장하는 사전(dictionary)을 만듭니다. 그리고 doc2bow()를 사용하여 각 문서를 벡터로 표현합니다. 마지막으로, TfidfModel()을 사용하여 문서의 TF-IDF 벡터를 생성합니다.

텍스트 검색 시스템 구축하기

텍스트 데이터를 전처리하고 벡터화한 후에는 텍스트 검색 시스템을 구축해야 합니다. Gensim을 활용하여 쿼리와 비교하여 가장 유사한 문서를 찾을 수 있습니다.

from gensim.similarities import MatrixSimilarity

def build_search_system(data):
    preprocessed_data = preprocess_text(data)
    corpus_tfidf = vectorize_documents(preprocessed_data)
    index = MatrixSimilarity(corpus_tfidf)
    return index

def search_documents(query, index, data):
    preprocessed_query = preprocess_text([query])
    query_tfidf = vectorize_documents(preprocessed_query)
    similarities = index[query_tfidf[0]]
    sorted_indices = sorted(range(len(similarities)), key=lambda i: similarities[i], reverse=True)
    results = [data[i] for i in sorted_indices if similarities[i] > 0]
    return results

위의 코드는 텍스트 검색 시스템을 구축하는 함수와 검색하는 함수입니다. build_search_system() 함수는 텍스트 데이터를 전처리하고 벡터화한 후에 유사도 인덱스를 생성합니다. search_documents() 함수는 쿼리를 입력받아 유사한 문서를 찾습니다.

마치며

이번 포스트에서는 Gensim 라이브러리를 활용하여 텍스트 기반 검색 시스템을 개발하는 방법에 대해 알아보았습니다. Gensim은 텍스트 데이터의 전처리와 벡터화, 유사도 측정을 효율적이고 쉽게 수행할 수 있는 기능을 제공합니다. 이러한 기능을 활용하여 텍스트 기반 검색 시스템을 더욱 효율적으로 개발할 수 있습니다.

더 많은 정보를 원하시면 Gensim 공식 문서를 참고하시기 바랍니다.

#텍스트기반검색 #Gensim