IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Python Discussion :

[Source] Analyser la fréquence d'occurence de caractères


Sujet :

Contribuez Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut [Source] Analyser la fréquence d'occurence de caractères
    Bonjours à tous,

    Ce script définie une fonction qui permet d'analyser la fréquence d'occurrence des lettres contenues dans un fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    def analyseFrequence():
        fh = input("Entrer le nom du fichier : ")
        fh = fh + '.txt'
        files=open(fh,'r')
        data=files.read()
        files.close()
        data = data.lower()
     
        import string
        alphabet = string.ascii_lowercase
        resultat, compteur = [], 0
     
        for e,lettre in enumerate(alphabet):
            for i,element in enumerate(data):
                if data[i] == alphabet[e]:
                    compteur += 1
            compteur = round((compteur / (len(data) - 1)) * 100, 2)
            resultat.append(compteur)
            compteur = 0
     
        for u,lettre in enumerate(alphabet):
            print("Pour le caractère ", alphabet[u], "on a ", resultat[u], "%")
    Utile pour la cryptographie.

  2. #2
    Membre expérimenté Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Points : 1 728
    Points
    1 728
    Par défaut
    Bonjour et merci pour ta contribution,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for e,lettre in enumerate(alphabet):
            for i,element in enumerate(data):
                if data[i] == alphabet[e]:
                    compteur += 1
    pour chaque lettre de l'alphabet,, tu parcours tout le contenu du fichier et tu compares toutes les lettres pour les compter.

    Il serait plus rapide de parcourir une seul fois le fichier et pour chaque lettre rencontrée d' incrementer son nombre d' occurences (dans un dictionnaire par exemple).

    Et y a-t-il une raison pour limiter ton analyse aux lettres minuscules?
    "Etre conscient de la difficulté permet de l'éviter.."
    Lao-Tseu.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    En fait c'était pour faciliter le test de la fonction maintenant si quelqu'un veux rajouter des caractères c'est très simple puisqu'il suffit de rajouter un caractère dans la variable alphabet.

    Pour l'histoire du comptage il me semble que prendre une lettre et de parcourir tout le fichier et plus rapide que de prendre la première lettre et de la comparer à l'alphabet -beaucoup moins efficace si il y a plusieurs fois la même lettre dans le fichier, ce qui est très très probable-.

  4. #4
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Mai 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2003
    Messages : 290
    Points : 388
    Points
    388
    Par défaut
    Bonjour,
    Je pense que Pacificator a raison. Il me semble plus simple et rapide d'utiliser un dictionnaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    compteur={}
    for car in data :
        compteur[car]=compteur.get(car,0)+1

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/08/2011, 15h37
  2. Réponses: 6
    Dernier message: 02/10/2010, 09h18
  3. [TPW] Afficher le nombre d'occurences de caractère
    Par miliassouma6600 dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 16/05/2009, 12h06
  4. Réponses: 5
    Dernier message: 05/11/2008, 06h43
  5. Remplacement d'occurence de caractères
    Par klingc dans le forum Langage
    Réponses: 26
    Dernier message: 12/09/2008, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo