|
|
|
@ -23,27 +23,22 @@ def levenshtein_distance(s1, s2):
|
|
|
|
|
|
|
|
|
|
return previous_row[-1]
|
|
|
|
|
|
|
|
|
|
def find_closest_actor_name(input_name, actor_names, actor_ids):
|
|
|
|
|
def find_closest_actor_name(input_name, actor_names):
|
|
|
|
|
closest_name = None
|
|
|
|
|
closest_id = None
|
|
|
|
|
min_distance = float('inf')
|
|
|
|
|
for i in range(len(actor_names)):
|
|
|
|
|
actor_name = actor_names[i]
|
|
|
|
|
actor_id = actor_ids[i]
|
|
|
|
|
distance = levenshtein_distance(input_name, actor_name)
|
|
|
|
|
if distance < min_distance:
|
|
|
|
|
min_distance = distance
|
|
|
|
|
closest_name = actor_name
|
|
|
|
|
closest_id = actor_id
|
|
|
|
|
return (closest_name,closest_id)
|
|
|
|
|
return (closest_name)
|
|
|
|
|
|
|
|
|
|
def getUniqueActorNames(filePath):
|
|
|
|
|
# Lire le fichier TSV
|
|
|
|
|
df = pd.read_csv(filePath, sep='\t')
|
|
|
|
|
actor_names = df['primaryName'].tolist()
|
|
|
|
|
actor_ids = df['nconst'].tolist() # Supposer que la colonne s'appelle 'ActorName'
|
|
|
|
|
# Supposer que la colonne s'appelle 'ActorName'
|
|
|
|
|
return (actor_names,actor_ids)
|
|
|
|
|
return (actor_names)
|
|
|
|
|
|
|
|
|
|
def saveUniqueActorsSorted(inputFilePath, outputFilePath):
|
|
|
|
|
# Lire le fichier TSV
|
|
|
|
@ -64,42 +59,56 @@ def saveUniqueActorsSorted(inputFilePath, outputFilePath):
|
|
|
|
|
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")
|
|
|
|
|
tupleActors = getUniqueActorNames("processedData/uniqueActorNames.tsv")
|
|
|
|
|
actor_names = getUniqueActorNames("processedData/uniqueActorNames.tsv")
|
|
|
|
|
selectedActorNames = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Bienvenue dans MoviePrecog!")
|
|
|
|
|
while(mustContinue):
|
|
|
|
|
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")
|
|
|
|
|
userChoice = input("Votre choix: ")
|
|
|
|
|
if(userChoice == "1"):
|
|
|
|
|
actorName = input("Quel acteur voulez-vous chercher ? ")
|
|
|
|
|
actorFound = find_closest_actor_name(actorName, tupleActors[0], tupleActors[1])
|
|
|
|
|
print("L'acteur/actrice trouvé est: " + actorFound)
|
|
|
|
|
sublevelMustContinue = True
|
|
|
|
|
leave = False
|
|
|
|
|
correctActorChoice = input("Est-ce le bon acteur/actrice ? (o = oui, n = non)")
|
|
|
|
|
if(correctActorChoice == "n"):
|
|
|
|
|
while(sublevelMustContinue):
|
|
|
|
|
leave = input("Sortir ou relancer ? (sortir = s, relancer = r)")
|
|
|
|
|
if(leave == "r"):
|
|
|
|
|
actorName = input("Quel acteur voulez-vous chercher ? ")
|
|
|
|
|
actorFound = find_closest_actor_name(actorName, tupleActors[0], tupleActors[1])
|
|
|
|
|
print("L'acteur/actrice trouvé est: " + actorFound)
|
|
|
|
|
sublevelMustContinue = True
|
|
|
|
|
correctActorChoice = input("Est-ce le bon acteur/actrice ? (o = oui, n = non)")
|
|
|
|
|
if(correctActorChoice == o):
|
|
|
|
|
sublevelMustContinue = False
|
|
|
|
|
else if(leave != "r" or (leave != "s" and leave ))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print(find_closest_actor_name("Robert downey jr",tupleActors[0],tupleActors[1]))
|
|
|
|
|
|
|
|
|
|
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.")
|
|
|
|
|