2017-08-08 1 views
0

J'ai un fichier texte que j'essaie d'obtenir les mots les plus couramment utilisés avec. J'utilise Counter, mais il semble juste retourner 1 pour chacun. J'apprenais, donc j'utilise le Simple Sabotage Field Manual pour mon fichier texte.Counter() renvoie 1 pour tous les mots. Comment obtenir le compte réel?

import re 
from collections import Counter 
my_file = "fieldManual.txt" 

#### GLOBAL VARIABLES 
lst = [] # used in unique_words 
cnt = Counter() 

######### 

def clean_word(the_word): 
    #new_word = re.sub('[^a-zA-Z]', '',the_word) 
    new_word = re.sub('^[^a-zA-z]*|[^a-zA-Z]*$', '', the_word) 
    return new_word 

def unique_words(): 
    with open(my_file, encoding="utf8") as infile: 
     for line in infile: 
      words = line.split() 
      for word in words: 
       edited_word = clean_word(word) 
       if edited_word not in lst: 
        lst.append(edited_word) 
        cnt[edited_word] += 1 
    lst.sort() 
    word_count = Counter(lst) 
    return(lst) 
    return (cnt) 

unique_words() 
test = ['apple','egg','apple','banana','egg','apple'] 
print(Counter(lst)) # returns '1' for everything 
print(cnt) # same here 

Ainsi, print(Counter(test)) retours, correctement,

contre ({ 'pomme': 3, 'œuf': 2, 'banane': 1})

Mais mon les tentatives d'imprimer les mots les plus fréquents dans mes lst retours

compteur ({ '': 1, 'A': 1, 'ACTUAL': 1, agree ': 1,' CONVENTION ': 1,' AK ': 1,' AND ': 1,' ANY ': 1,' RIEN ': 1,' AR ': 1,' TEL ': 1,' ASCII ': 1,' À propos de ': 1,' Abstract ': 1,' Accidentellement ': 1,' Act ': 1,' Actes ': 1,' Ajouter ': 1,' Supplémentaire ': 1,' Ajuster ': 1,' Avocat ' : 1, 'Après': 1, 'Agriculture': 1, ...

Après la réponse from here, j'ai essayé d'ajouter cnt.Update(edited_word) dans le if edited_word not in lst:, mais l'impression puis cnt je viens d'obtenir des caractères simples:

Compteur ({'e': 2401, 'i': 1634, 't': 1470, 's': 1467, 'n': 1455, 'r': 1442, 'a': 1407, 'o ': 1244,' l ': 948,' c ': 862,' d ': 752,' u ': 651,' p ': 590,' g ': 564,' m ': 436, ...

Comment puis-je retourner la fréquence de chaque mot unique de mon fichier .txt?

Répondre

1

Vous ajoutez uniquement le mot à la liste s'il n'est pas déjà trouvé. En tant que tel, chaque mot n'apparaîtra qu'une seule fois.

+0

[Oh ... mon ... bonté] (http://gif-finder.com/wp-content/uploads/2015/02/Steve-Carell-Facepalm.gif). Merci beaucoup de souligner que, maintenant super évident, le point. Ça va le faire! J'étais bien au-dessus de ça et je ne me suis pas reculé et je l'ai franchi à haute voix ... – BruceWayne

1

Il y a quelques erreurs ici. Vous devez soit incrémenter le compteur indépendamment du fait que le mot soit dans la liste, ou simplement appeler le compteur de la liste à partir de la chaîne fractionnée. Vous avez des instructions de retour dos à dos (la seconde ne sera pas exécutée). Vous trouvez le compte de la liste avec word_count et en ignorant cette sortie (qui serait également 1 pour chaque mot). Juste le nettoyage de ce code aurait probablement aidé à résoudre le problème.

+0

Merci beaucoup pour vos suggestions. J'apprends Python (évidemment je suppose) et j'essayais juste de le faire fonctionner, puis je vais revenir en arrière pour le rendre plus serré, et peut-être même aller vers [CodeReview] (https://codereview.stackexchange.com/) . Aussi, merci pour la note sur 'return', je vais les mettre sur la même ligne. – BruceWayne