A partir de ahora, tengo una función para reemplazar la función countChars,programa en Python que encuentra la palabra más frecuente en un archivo .txt, debe imprimir palabra y su recuento
def countWords(lines):
wordDict = {}
for line in lines:
wordList = lines.split()
for word in wordList:
if word in wordDict: wordDict[word] += 1
else: wordDict[word] = 1
return wordDict
pero cuando ejecuto el programa escupe esta abominación (esto es sólo un ejemplo, hay cerca de dos páginas de palabras con un enorme número de serie junto a él)
before 1478
battle-field 1478
as 1478
any 1478
altogether 1478
all 1478
ago 1478
advanced. 1478
add 1478
above 1478
Aunque obviamente esto significa que el código es lo suficientemente sólidas como para funcionar, estoy no obtengo lo que quiero de eso. que necesita para imprimir el número de veces que cada palabra está en el archivo (gb.txt, que es la dirección de Gettysburg) Obviamente cada palabra que se encuentra en el archivo no está ahí exactamente 1478 veces ..
I' m bastante nuevo en la programación, por lo que estoy un poco perplejo ..
from __future__ import division
inputFileName = 'gb.txt'
def readfile(fname):
f = open(fname, 'r')
s = f.read()
f.close()
return s.lower()
def countChars(t):
charDict = {}
for char in t:
if char in charDict: charDict[char] += 1
else: charDict[char] = 1
return charDict
def findMostCommon(charDict):
mostFreq = ''
mostFreqCount = 0
for k in charDict:
if charDict[k] > mostFreqCount:
mostFreqCount = charDict[k]
mostFreq = k
return mostFreq
def printCounts(charDict):
for k in charDict:
#First, handle some chars that don't show up very well when they print
if k == '\n': print '\\n', charDict[k] #newline
elif k == ' ': print 'space', charDict[k]
elif k == '\t': print '\\t', charDict[k] #tab
else: print k, charDict[k] #Normal character - print it with its count
def printAlphabetically(charDict):
keyList = charDict.keys()
keyList.sort()
for k in keyList:
#First, handle some chars that don't show up very well when they print
if k == '\n': print '\\n', charDict[k] #newline
elif k == ' ': print 'space', charDict[k]
elif k == '\t': print '\\t', charDict[k] #tab
else: print k, charDict[k] #Normal character - print it with its count
def printByFreq(charDict):
aList = []
for k in charDict:
aList.append([charDict[k], k])
aList.sort() #Sort into ascending order
aList.reverse() #Put in descending order
for item in aList:
#First, handle some chars that don't show up very well when they print
if item[1] == '\n': print '\\n', item[0] #newline
elif item[1] == ' ': print 'space', item[0]
elif item[1] == '\t': print '\\t', item[0] #tab
else: print item[1], item[0] #Normal character - print it with its count
def main():
text = readfile(inputFileName)
charCounts = countChars(text)
mostCommon = findMostCommon(charCounts)
#print mostCommon + ':', charCounts[mostCommon]
#printCounts(charCounts)
#printAlphabetically(charCounts)
printByFreq(charCounts)
main()
Wow. Si bien este puede no ser el método que nuestro profesor quiere que usemos, esto funciona perfectamente para encontrar el conteo de números. En este punto, preferiría obtenerlos para que se impriman en una sola columna para poder leerlos. También hay varias partes en la tarea, que incluyen: Solo imprime la palabra más común. Imprimiendo todas las palabras con sus recuentos en orden alfabético. Y luego imprima todas las palabras con sus recuentos en orden de frecuencia. Estos son bastante simples, si no me equivoco, pero no sé si lo que he aprendido es compatible con lo que me has dado hasta ahora. – m96
Las tareas que mencionas no son muy difíciles, necesitarías usar '.sort()' o 'sorted()', quizás buscar cómo ordenar un diccionario. Es su tarea, y debe hacerlo;), pero si está atrapado en alguna parte, publique lo que tiene (como otra pregunta) y alguien lo ayudará. – Akavall