El programa Python que encuentra la palabra más frecuente en un archivo .txt, debe imprimir la palabra y su conteo
A partir de ahora, tengo una función para reemplazar la función countChars,
<code>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 </code>
pero cuando ejecuto el programa, escupe esta abominación (esto es solo un ejemplo, hay cerca de dos páginas de palabras con un gran número de números al lado)
<code>before 1478 battle-field 1478 as 1478 any 1478 altogether 1478 all 1478 ago 1478 advanced. 1478 add 1478 above 1478 </code>
Si bien, obviamente, esto significa que el código es lo suficientemente sólido como para ejecutarse, no estoy obteniendo lo que quiero. Necesita imprimir cuántas veces hay cada palabra en el archivo (gb.txt, que es la dirección de Gettysburg) Obviamente, cada palabra que está en el archivo no está allí exactamente 1478 veces ...
Soy bastante nuevo en la programación, así que estoy un poco perplejo ..
<code>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() </code>