Il existe plusieurs façons d’identifier la langue dans laquelle un texte a été écrit. L’une d’entre elle met en oeuvre l’analyse fréquentielle (également utilisée en cryptanalyse) en identifiant la fréquence d’apparition de chaque lettre de l’alphabet dans le texte (arbitrairement long) à identifier. Cette analyse produit une signature du texte. Cette signature peut alors être comparée à la signature des langues pressenties pour être la langue d’origine.
La proximité de la signature du texte avec une langue en particulier fait de cette dernière une bonne candidate pour être la langue de rédaction du texte.
La signature d’une langue est construite sur un corpus des mots de cette langue. A titre d’exemple la langue française contient environ 300 000 mots dans lesquels on retrouve environ 8.2% de “a”, 0.9% de “b”, etc.
Pour cet exercice, vous devez utiliser en priorité le fichier squelette ex06-guess-language.py. IMPORTANT : Enregistrez le avec Right Click + Save Link As...
pour conserver l’encodage.
Selon la convention de structuration des modules, ce fichier sera structuré en quatre parties :
L’objectif est d’écrire une fonction guess_language()
:
Vérifier le bon fonctionnement de la fonction en effectuant un appel depuis main()
et en affichant la valeur de retour (les doctests de la fonction donnent des exemples d’appel et les valeurs de retour correspondantes).
La comparaison se fera en calculant une “distance” globale construite comme la somme des carrés des écarts élémentaires. La langue pour laquelle la “distance” avec le texte sera la plus faible sera une bonne hypothèse.
La signature des langues est fournie dans les variables globales ENGLISH
, FRENCH
, GERMAN
et SPANISH
définies dans la partie Imports et définition des variables globales du fichier.
TRTAB
est utilisée dans la méthode str.translate
qui permet de remplacer les caractères accentués par les caractères non accentués correspondants dans la chaîne de caractères sur laquelle elle est appelée.
Une fois la fonction opérationnelle pour quelques arguments, ET SEULEMENT DANS CE CAS, lancer les doctests dans un terminal:
$ python -m doctest ex06_language.py -v
La totalité des doctests doivent réussir.
Vérifier la robustesse de la prédiction avec les textes identifiés par les variables globales LCELR
, IF
, POEMAXX
et GOETHE
. Chacun est un poème dans une des langues suivantes : français, anglais, espagnol et allemand.