J'ai un problème d'exercice où je suis invité à écrire une fonction qui parcourt 50 fichiers texte et compte la fréquence d'un mot choisi dans chaque fichier texte. Mon code pour le moment ressemble à ceci:

def count(term):
    frequencies = 0
    
    work_dir = "C:/my_work_directory"
    for i in range(1, 51):
        name = "chapter-{i}.txt".format(i=i)
        path = os.path.join(work_dir, name)
        with io.open(path, "r") as fd:
            content = fd.read()
    
        chapter = io.StringIO(content)
        line = chapter.readline()
        print(chapter)
        while line:
            lower = line.lower()
            cleaned = re.sub('[^a-z ]','', lower)
            words = cleaned.strip().split(' ')
            for word in words:
                if word == term:
                    frequencies += 1
            line = chapter.readline()
        
        print(frequencies)

Le résultat que je veux est que, si j'entre count ("Man"), j'obtiens 50 fréquences différentes de la fréquence à laquelle le mot "Man" est apparu dans chaque fichier texte. Cependant, tout ce que j'obtiens pour le moment est 50 zéros. Je suis assez sûr que c'est parce que j'ai initialisé la variable «fréquences» à 0 et que je n'y ai rien fait. Quelqu'un peut-il m'aider à résoudre ce problème ou me dire où je vais mal? Toute aide serait grandement appréciée, merci.

1
userpisquared 25 oct. 2020 à 15:55

2 réponses

Meilleure réponse

Eh bien, votre «homme» a une majuscule et tous vos mots sont en minuscules. La première chose à faire serait donc d'appeler la fonction lower() sur la variable term. La deuxième chose qui ne va pas, et vous ne le remarquerez que plus tard, est que vous gardez un compte courant, au lieu d'un compte par fichier. Déplacez donc l'initialisation de la variable de fréquence dans la boucle for. Cela devrait donc ressembler à quelque chose comme ça.

def count(term):
    term = term.lower()
    
    work_dir = "C:/my_work_directory"
    for i in range(1, 51):
        frequencies = 0

        name = "chapter-{i}.txt".format(i=i)
        path = os.path.join(work_dir, name)
        with io.open(path, "r") as fd:
            content = fd.read()
    
        chapter = io.StringIO(content)
        line = chapter.readline()
        print(chapter)
        while line:
            lower = line.lower()
            cleaned = re.sub('[^a-z ]','', lower)
            words = cleaned.strip().split(' ')
            for word in words:
                if word == term:
                    frequencies += 1
            line = chapter.readline()
        
        print(frequencies)
0
Marko 25 oct. 2020 à 13:03

Je l'ai exécuté et cela fonctionne bien après avoir changé work_dir = "" (donc il a regardé local). Je pense donc que vous devriez vérifier le chemin du répertoire de travail ou affirmer si le paramètre de terme est correct

0
Uur Kn 25 oct. 2020 à 13:05