
Recommender Systems (Content-based Filtering)
Système de recommandation basé sur le contenu utilisant des embeddings de phrases pour trouver des critiques de films similaires à partir d'une critique utilisateur.
Vue d'ensemble du projet
Ce projet implémente un système de recommandation basé sur le contenu pour analyser des critiques de films et trouver des critiques similaires. Le système utilise des embeddings de phrases générés par un modèle SentenceTransformer multilingue pour calculer la similarité cosinus entre les critiques.
L'application traite un dataset de critiques du film Fight Club, nettoie le texte en supprimant les caractères spéciaux et le HTML, puis génère des embeddings vectoriels pour chaque critique. L'utilisateur peut saisir sa propre critique et le système retourne les 5 critiques les plus similaires avec leurs scores de similarité.
Le projet démontre l'application pratique du NLP et des systèmes de recommandation dans le domaine du divertissement, en utilisant des techniques avancées de traitement du langage naturel et de calcul de similarité sémantique.
Fonctionnalités clés
Implémentation du code
1. Import des bibliothèques
from preper_f import PreperData import pandas as pd from sentence_transformers import SentenceTransformer from sklearn.metrics.pairwise import cosine_similarity from bs4 import BeautifulSoup import re
2. Chargement et prétraitement des données
def main():
data = pd.read_csv('fightclub_critiques.csv', encoding="utf-8")
preper_data = PreperData(data)
preper_data.preper_data()
# Nettoyage des caractères spéciaux
preper_data.data["review_content"] = preper_data.data["review_content"].apply(
preper_data.clean_special_character
)
# Génération des embeddings
preper_data.transform_data()3. Fonction de nettoyage du texte
def clean_special_character(self, text):
if not isinstance(text, str):
return ""
# Suppression des balises HTML
html_pattern = re.compile(r'<[^>]+>')
if html_pattern.search(text):
return BeautifulSoup(text, "html.parser").get_text(separator=" ")
else:
# Normalisation des espaces
text = re.sub(r'\n+', ' ', text)
text = re.sub(r'\s+', ' ', text)
return text.strip()4. Génération des embeddings
def transform_data(self):
# Utilisation du modèle multilingue
self.model = SentenceTransformer("paraphrase-multilingual-MiniLM-L12-v2")
# Génération des embeddings pour chaque critique
self.data["review_embedding"] = self.data["review_content"].apply(
lambda x: self.model.encode(x)
)
return self.data5. Calcul de similarité et recommandations
def find_top_5_similar_reviews(self, input_cretique, similarity_threshold=0.6):
# Génération de l'embedding pour la critique utilisateur
input_cretique_embedding = self.model.encode(input_cretique)
similarities = []
for i, embedding in enumerate(self.data["review_embedding"]):
# Calcul de la similarité cosinus
similarity = cosine_similarity([input_cretique_embedding], [embedding])[0][0]
similarities.append((i, similarity))
# Filtrage par seuil et sélection du top 5
filtered_similarities = [(i, score) for i, score in similarities
if score > similarity_threshold]
if not filtered_similarities:
filtered_similarities = sorted(similarities, key=lambda x: x[1], reverse=True)[:5]
top_5 = sorted(filtered_similarities, key=lambda x: x[1], reverse=True)[:5]
# Construction des résultats
results = []
for i, score in top_5:
results.append({
"index": i,
"similarity": score,
"review": self.data.iloc[i]["review_content"]
})
return pd.DataFrame(results)6. Interface interactive
print("Système de recommandation prêt!\n")
while True:
user_input = input("Entrez votre critique pour le film de fightclub (ou 'exit' pour quitter): ").strip()
if user_input.lower() == 'exit':
print("Au revoir!")
break
if not user_input:
print("Veuillez entrer une critique valide.")
continue
try:
print(f"\nRecherche de critiques similaires à: '{user_input}'")
similar_reviews = preper_data.find_top_5_similar_reviews(user_input)
print("\nTop 5 critiques similaires:")
for idx, row in similar_reviews.iterrows():
print(f"Score: {row['similarity']:.3f}")
print(f"Critique: {row['review']}")
except Exception as e:
print(f"Erreur lors de la recherche: {e}")Technologies utilisées
Détails du projet
Client
Projet Personnel
Timeline
2025 – Présent
Rôle
Développeur Machine Learning & NLP
À propos du dataset
Autres projets

JobHub – Plateforme d'Emploi Intelligente avec Agent IA
Application Web Full-Stack

Email AI Platform
Intelligence Artificielle

Ovia
Intelligence Artificielle

MediBook Platform
Web Application (Healthcare SaaS)

MediBook Platform
Web Application (Healthcare SaaS)

Personal Portfolio Website
Web Application
Reboturn
E-Commerce Platform (Eco-Conscious SaaS)

Salary Prediction with Linear Regression
Machine Learning Project

Insurance Cost Prediction with Multivariable Linear Regression
Machine Learning Project

Logistic Regression (Classification)
Machine Learning Project

Brain Tumor Classification (Deep Learning - CNN)
Machine Learning Project

Decision Trees
Machine Learning Project

Random Forest
Machine Learning Project

Clustering (K-means)
Machine Learning Project

Anomaly Detection
Machine Learning Project

Système de Recommandation Netflix
Intelligence Artificielle

VelociType — Test de Vitesse de Frappe
Application Python

Watermark — Application de Filigrane d'Images
Application Python

XO Battle — Jeu de Tic-Tac-Toe
Jeu Python

PulseCode — Morse Converter
Application Python
© 2025 Sina Ganji. Tous droits réservés.