-
Notifications
You must be signed in to change notification settings - Fork 0
/
contentbasedFiltering
47 lines (33 loc) · 1.5 KB
/
contentbasedFiltering
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel
movies_df = pd.read_csv('/content/drive/MyDrive/content-based filtering/tmdb_5000_movies.csv')
# 중요한 열만 선택
selected_columns = ['id', 'title', 'genres', 'keywords']
movies_df = movies_df[selected_columns]
# 결측치 처리
movies_df = movies_df.dropna()
# TF-IDF 변환을 위한 벡터화 객체 생성
tfidf_vectorizer = TfidfVectorizer(stop_words='english', lowercase=True)
movies_df['content'] = movies_df['genres'] + ' ' + movies_df['keywords']
# TF-IDF 행렬 생성
tfidf_matrix = tfidf_vectorizer.fit_transform(movies_df['content'])
# 코사인 유사도 계산
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)
# 추천 함수
def content_based_recommendation(title, cosine_sim=cosine_sim):
# 제목에 해당하는 인덱스 찾기
idx = movies_df[movies_df['title'] == title].index[0]
# 해당 영화에 대한 유사도 측정
sim_scores = list(enumerate(cosine_sim[idx]))
# 유사도에 따라 정렬
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
# 상위 10개 아이템 선택
sim_scores = sim_scores[1:11]
# 선택된 아이템의 인덱스 가져오기
movie_indices = [i[0] for i in sim_scores]
# 선택된 아이템의 제목 반환
return movies_df['title'].iloc[movie_indices]
# 예시: 'Avatar'와 비슷한 영화 추천
result = content_based_recommendation('Avatar')
print(result)