Progtwig de conteo de palabras Python desde archivo txt

Estoy tratando de escribir un progtwig que cuente las 5 palabras más comunes en un archivo txt.

Aquí está lo que tengo hasta ahora:

file = open('alice.txt') wordcount = {} for word in file.read().split(): if word not in wordcount: wordcount[word] = 1 else: wordcount[word] += 1 for k, v in wordcount.items(): print (k, v) 

El progtwig tal como es cuenta cada palabra en el archivo .txt.

Mi pregunta es cómo hacerlo para que solo cuente las 5 palabras más comunes en el archivo para que muestre las palabras y el número de palabras al lado de cada palabra.

Una captura – no puedo usar el diccionario … lo que sea que eso signifique.

Fácil, solo necesitas encontrar las 5 palabras más comunes en el archivo .

Así que podrías hacer algo como esto:

 wordcount = sorted(wordcount.items(), key=lambda x: x[1], reverse=True) 

Y luego, este diccionario se ordenará por valores (recuerde que sorted devolver una lista).

Puedes usar el siguiente código para obtener las 5 palabras más comunes:

 for k, v in wordcount[:5]): print (k, v) 

Así que el código completo se ve como:

 wordcount = {} with open('alice.txt') as file: # with can auto close the file for word in file.read().split(): if word not in wordcount: wordcount[word] = 1 else: wordcount[word] += 1 wordcount = sorted(wordcount.items(), key=lambda x: x[1], reverse=True) for k, v in wordcount[:5]: print(k, v) 

Además, aquí hay una forma más sencilla de hacer esto con el uso de collections.Counter . collections.Counter :

 from collections import Counter with open('alice.txt') as file: # with can auto close the file wordcount = Counter(file.read().split()) for k, v in wordcount.most_common(5): print(k, v) 

La salida es la misma que la primera solución.

 File_Name = 'file.txt' counterDict = {} with open(File_Name,'r') as fh: #Reading all lines into a list. data = fh.readlines() for line in data: # Removing some characters like '.' , ',' # Changing all case into lower. line = line.lower().replace(',','').replace('.','') # Splitting all words into list elements. words = line.split() for word in words: # Add the word into counterDict if it is not present. # key should be 1. if word not in counterDict: counterDict[word] = 1 #If the word is already in the counterDict, then increase its count by one. else: counterDict[word] = counterDict[word] + 1 # The sorting will be based on word count. # Eg : lambda x = (word,count) = x[0] = word , x[1]=count sorted_counterDict = sorted(counterDict.items(), reverse=True , key=lambda x : x[1]) #sorted_counterDict[0:5] , print first five. for key,val in sorted_counterDict[0:5]: print(key,val) 

Hay una función incorporada que ordena un diccionario por clave:

 sorted(wordcount, reverse=True) 

Ahora depende de usted averiguar cómo obtener / imprimir solo los primeros cinco elementos;)

Nota: por supuesto ordenado también es capaz de ordenar otras colecciones.