https://www.kaggle.com/datasets/hijest/genre-classification-dataset-imdb
Before![]() | After![]() |
---|
-> WordPunctTokenizer와 word_tokenize의 차이점은 WordPunctTokenizer는 단어와 구두점을 구분하여 토큰화를 하고, word_tokenize는 공백을 기준으로 단어를 분리하여 토큰화를 한다는 것이다.
-> PorterStemmer와 WordNetLemmatizer의 차이점은 PorterStemmer는 단어의 접미사를 제거하여 단어의 원령을 추출하고, WordNetLemmatizer는 사전 형태에 기반한 형태학 분석을 사용해 단어의 원형을 추출한다. 따라서 PorterStemmer가 처리 속도에서는 우수하지만 성능에 있어서는 WordNetLemmatizer가 우수하다.
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
df['all_tokens'] = df['all_tokens'].apply(lambda tokens: ' '.join(tokens))
# Vectorize the 'all_tokens' column
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(df['all_tokens'])
tfidf_csr_matrix = tfidf_matrix.tocsr()
# Define the tfidf_search function
def tfidf_search(query, k=5):
query_csr_matrix = tfidf_vectorizer.transform([query])
similarities = cosine_similarity(query_csr_matrix, tfidf_csr_matrix).flatten()
top_similarities = sorted(similarities, reverse=True)[:k]
top_indices = similarities.argsort()[-k:][::-1]
top_titles = [df.iloc[i]['title'] for i in top_indices]
for top_title, top_similarity in zip(top_titles, top_similarities):
print(round(top_similarity, 4), top_title)