Projet : fichiers

Utilisation des fichiers en python.

Mise en place de votre projet :

  1. créez un dossier nommé fichiers-donnees où vous placerez vos fichiers
  2. créez un projet vscode dans ce dossier

Dans tout ce projet on vous demande de coder le moins d'algorithmes possibles et d'utiliser au maximum les méthodes de listes de python :

De plus, lorsque l'on utilise des fichiers, il faut lire les fichiers une seule fois en stockant le contenu utile dans une ou plusieurs variables puis ne plus utiliser le fichier car l'accès à un fichier sur le disque dur est beaucoup plus long que l'accès à des variables en mémoire.

Jouons sur les mots

Ce repo github contient plusieurs fichiers csv contenant des mots français.

  1. récupérez directement le fichier dictionary.csv à l'adresse : https://raw.githubusercontent.com/hbenbel/French-Dictionary/master/dictionary/dictionary.csv
  2. sauvez le dans le dossier de votre projet (fichiers-donnees) sous le nom mots.txt

Le fichier contient une liste de mots, un mot par ligne.

Lecture du fichier en une seule fois

  1. Récupérez tout le fichier dans une chaîne de caractères que vous appellerez texte.
  2. afficher la chaîne de caractères à l'écran.
  3. Combien de caractères "\n" possède ce fichier ?

Les caractères "\n" sont des retour à la ligne et permettre de délimiter les lignes d'un fichier texte.

Lecture du fichier ligne à ligne

Notre fichier contient une donnée (un mot) par ligne. Il peut donc être utile de stocker chaque mot dans un tableau :

  1. En utilisant la lecture ligne à ligne d'un fichier. Construisez une liste mots dont chaque élément est une ligne du fichier.
  2. Affichez la 42ième ligne du texte (l'indice 41 de la liste).

Vous avez du remarquer que l'affichage de la ligne 42 va 2 fois à la ligne. Ceci s'explique par le fait que :

  1. la commande print termine son affichage par un retour à la ligne
  2. le mot lui même est une ligne du fichier et contient donc également le caractère "\n"

Lorsque les données sont contenues dans chaque ligne d'un fichier texte, on a coutume de nettoyer les données, c'est à dire de supprimer les caractères de fin de ligne de la donnée ainsi que les caractères espaces " " de début et de fin de ligne. Par exemple si la ligne contient " coucou \n" on aura envie de ne conserver que la chaine "coucou", c'est à dire la ligne sans le caractère de retour à la ligne ("\n") et sans les espaces au début et à la fin.

Pour faire cela automatiquement, python met à votre disposition la méthode strip des chaînes de caractères. Donc :

Modifier votre liste mots pour que chaque élément contienne la version stripée de la ligne.

corrigé

mots = []
f = open("mots.txt", "r", encoding="uft-8")

for l in f:
    mots.append(l.strip())
f.close()

Avec cette nouvelle liste il vous sera plus facile de répondre aux questions suivantes :

  1. Combien de mots contient ce fichier ?
  2. Quel est le 42ème mot du dictionnaire ?
  3. Combien de mots finissent par g ?
  4. Combien de mots contiennent un ç

Enfin :

Répondez à cette question existentielle : nycthémères est-il un mot français ? Et si oui, quel est son numéro de ligne ? Et quel est la signification de ce mot ?

Le compte de Monte-Cristo

Utilisez python pour :

Téléchargez le comte de Monte-Cristo et sauvez le sur votre disque dur.

Les accès réseau sont toujours coûteux en temps, on a donc coutume de ne télécharger le fichier qu'une fois puis d'utiliser une copie locale pour tous les traitements.

Lisons ce fichier avec python. On veut le lire en une seule fois car c'est le texte en entier qui est iomportant et pas une ligne particulière :

Récupérez tout le fichier dans une chaine de caractères que vous appellerez monte_cristo.

Avec cette chaine de caractères :

  1. Comptez le nombre de caractères différents utilisés (vous pourrez mettre chaque caractère dans un ensemble), et affichez-les.
  2. Remplacez tous les caractères qui ne sont pas des lettres (c'est à dire qui ne sont pas dans : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzÀÇÉÊÎÔàâçèéêëîïôùû") par des espaces (vous pourrez utiliser la méthode replace)
  3. En déduire le nombre de mots utilisés dans le texte
  4. En déduire le nombre de mots différents utilisés dans le texte
  • Vous pourrez utiliser la méthode split des chaînes de caractères pour découper le texte. Il ne faudra pas donner explicitement de séparateur. Pourquoi ?
  • Si vous voulez des mots différents, les ensembles sont fait pour ça.

Nombres à trouver

  • nombre de caractères : 105
  • nombre de mots : 134712
  • nombre de mots différents : 12244

Comptons en utilisant ce que l'on a fait précédemment :

  1. Combien de fois chaque mot est-il utilisé dans le texte (utilisez un dictionnaire où les mots seront les clés et la valeur le nombre de fois ou ce mot est vue)?
  2. Est-il question de Marseille dans le texte ? Et si oui, combien de fois ?
  3. Quelle est le mot qui revient le plus souvent ?
  4. Quels sont les mots qui reviennent au moins $\frac{n}{2}$ fois où $n$ est le nombre de fois où apparaît le mot le plus fréquent.
  5. Quel est le mot le plus fréquent pour chaque longueur de mots ?

Nombres à trouver

  • Nombre de "Marseille" : 84
  • Mot le plus fréquent :
    • (4790, 'de')
    • (2946, 'le')
    • (2940, 'et')
    • (2855, 'la')
    • (2731, 'à')
    • (2555, 'il')
  • Mots de longueur différentes :
    • (4790, 'de')
    • (2731, 'à')
    • (1923, 'que')
    • (1543, 'vous')
    • (872, 'était')
    • (777, 'Dantès')
    • (291, 'monsieur')
    • (258, 'Villefort')
    • (219, 'Caderousse')
    • (161, 'Fernand')
    • (26, 'prisonniers')
    • (22, 'bonapartiste')
    • (20, 'contrebandiers')
    • (11, 'véritablement')
    • (10, 'malheureusement')
    • (3, 'particulièrement')
    • (1, 'révolutionnairement')
    • (1, 'imperceptiblement')

Suites de mots :

  1. Créez un dictionnaire dont les clés sont les mots du texte et les valeurs une liste de tous les mots qui apparaissant juste après dans le texte.
  2. En moyenne, combien de mots différents suivent un mot donné ?
  3. En moyenne, combien de mots différents précèdent un mot donné ?
  4. Créez des phrases aléatoires de 10 mots, où chaque paire de mot successive apparaît dans le texte.