Recherche de langue

Contexte

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.

Environnement de travail

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 :

  1. Imports et définition des variables globales ;
  2. Définition des fonctions secondaires ;
  3. Définition de la fonction principale ;
  4. Appel protégé de la fonction principale.

Objectifs

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).

Informations complémentaires

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.

Doctests

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.

Application

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.