You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

115 lines
4.0 KiB

import csv
import os
from typing import List
import numpy as np
import pandas as pd
def levenshtein_distance(s1, s2):
if len(s1) < len(s2):
return levenshtein_distance(s2, s1)
if len(s2) == 0:
return len(s1)
previous_row = range(len(s2) + 1)
for i, c1 in enumerate(s1):
current_row = [i + 1]
for j, c2 in enumerate(s2):
insertions = previous_row[j + 1] + 1
deletions = current_row[j] + 1
substitutions = previous_row[j] + (c1 != c2)
current_row.append(min(insertions, deletions, substitutions))
previous_row = current_row
return previous_row[-1]
def find_closest_actor_name(input_name, actor_names):
closest_name = None
min_distance = float('inf')
for i in range(len(actor_names)):
actor_name = actor_names[i]
distance = levenshtein_distance(input_name, actor_name)
if distance < min_distance:
min_distance = distance
closest_name = actor_name
return (closest_name)
def getUniqueActorNames(filePath):
# Lire le fichier TSV
df = pd.read_csv(filePath, sep='\t')
actor_names = df['primaryName'].tolist()
return (actor_names)
def saveUniqueActorsSorted(inputFilePath, outputFilePath):
# Lire le fichier TSV
df = pd.read_csv(inputFilePath, sep='\t')
# Trier le DataFrame par 'primaryName' en ordre alphabétique
df_sorted = df.sort_values(by='primaryName')
# Écrire les données triées dans le fichier CSV
with open(outputFilePath, mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file, delimiter='\t')
# Écrire l'en-tête
writer.writerow(['primaryName', 'nconst'])
# Écrire chaque ligne du DataFrame trié dans le fichier CSV
for index, row in df_sorted.iterrows():
writer.writerow([row['primaryName'], row['nconst']])
def ask_user_verification(actor_name):
response = input(f"Est-ce que vous vouliez dire {actor_name}? (Oui/Non) ")
return response.lower() in ['oui', 'o', 'yes', 'y']
def add_actor(actor_names):
user_input = input("Entrez le nom de l'acteur à ajouter : ")
closest_name = find_closest_actor_name(user_input, actor_names)
if ask_user_verification(closest_name):
return closest_name
else:
user_choice = input("Voulez-vous réessayer avec un autre nom? (Oui/Non) ")
if user_choice.lower() in ['oui', 'o', 'yes', 'y']:
return add_actor(actor_names)
else:
return None
if __name__ == "__main__":
mustContinue = True
if not os.path.exists("processedData/uniqueActorNames.tsv"):
saveUniqueActorsSorted("processedData/actorsRatingsGroupedWithName.tsv", "processedData/uniqueActorNames.tsv")
actor_names = getUniqueActorNames("processedData/uniqueActorNames.tsv")
selectedActorNames = []
print("Bienvenue dans MoviePrecog!")
while mustContinue:
print("1: Ajouter un acteur à la liste (4 acteurs / actrices requis)")
print("2: Afficher la liste")
print("3: Vider la liste")
print("4: Lancer la prévision")
print("5: Quitter")
choice = input("Faites votre choix : ")
if choice == '1':
result = add_actor(actor_names)
if result:
selectedActorNames.append(result[0])
print(f"{result[0]} a été ajouté à la liste.")
elif choice == '2':
print("Liste des acteurs sélectionnés :")
for actor in selectedActorNames:
print(actor)
elif choice == '3':
selectedActorNames.clear()
print("La liste a été vidée.")
elif choice == '4':
# TODO: Implémenter la comparaison
print("Lancement de la prévision... (TODO)")
elif choice == '5':
print("Au revoir !")
mustContinue = False
else:
print("Choix non valide, veuillez réessayer.")