Information

Author(s) Jérémie Kuperblum
Deadline Geen deadline
Submission limit No limitation

Sign in

Monitorat02.2

Contexte :

Les PDGs d’une entreprise veulent investir dans un nouveau moteur de recherche de documents. Étant donné que vous êtes réputé pour développer de bons logiciels, ils vous ont contacté et vous ont donné un cahier des charges résumant ce qu’ils souhaitent.

Dans ce cahier des charges, ils vous expliquent qu’ils aimeraient un programme qui permet de comparer deux documents afin de savoir s’ils sont similaires. Cela permettra, sur base d’un document, de trouver d’autres sources traitant du même sujet.

Ils vous ont également spécifié comment ils voulaient que vous compariez ces documents : deux documents sont considérés comme très similaires si, étant donné une liste de mots spécifiée à priori, 80% de ces mots ont le même nombre d’occurrences dans les deux documents (nombre d’occurrences d’un mot = nombre d’apparitions d’un mot dans le document).

Énoncé :

Vous devez coder une fonction similaire(doc1, doc2, liste_mots) qui prend en entrée deux strings (qui représentent les deux documents) et une liste de mots. Votre fonction doit retourner True si au moins 80% des mots se trouvant dans liste_mots apparaissent le même nombre de fois dans les deux documents. Sinon, votre fonction retourne False.

Exemple :

doc1 = "Ceci est un exemple de document"
doc2 = "Ceci est un autre exemple qui s’apparente à un document"

similaire(doc1, doc2, ["Ceci", "est", "un"]) # renvoie False
similaire(doc1, doc2, ["Ceci", "est", "exemple"]) # renvoie True
similaire(doc1, doc2, ["Ceci", "est", "autre"]) # renvoie False
similaire(doc1, doc2, ["exemple", "est", "document"]) # renvoie True

Votre fonction doit utiliser des dictionnaires pour résoudre ce problème (un par document). Vous ne recevrez jamais de string vide ou de liste vide en entrée.

Pour ce faire, il vous est demandé de créer une fonction to_dict(doc) qui prend en entrée un document sous forme string et renvoie en sortie un dictionnaire qui comptabilise le nombre d'occurence de chaque mot dans le document.

Par exemple, to_dict("un chat et un chien") renverra en sortie une doctionnaire contenant les éléments suivants:

d["un"]=2
d["chat"]=1
d["et"]=1
d["chien"]=1

Dans votre fonction similaire(doc1, doc2, liste_mots), faites ensuite appel à votre fonction to_dict(doc) afin de comptabiliser le nombre d'occurence de chaque mot dans chacun des documents, et utilisez ces dictionnaires afin de réaliser la comparaison avec la liste de mots.

Note :

Pour cet exercice, nous vous conseillons fortement l'utilisation de la fonction split(), que vous pouvez directement utiliser sans la coder, au sein de votre fonction to_dict. Cette fonction permet de transformer un string en une liste de strings en "splittant" le string au niveau des espaces. Elle permet donc de déterminer les mots. Nous supposons que les documents ont été nettoyés des ponctuations au préalable et donc que split nous fournit la liste des mots.

Exemple : "Ceci est un exemple".split() donne comme résultat : ["Ceci", "est", "un", "exemple"]


Implémentation

Écrivez la signature et le corps de la fontion similaire(doc1, doc2, liste_mots)