当前位置: 首页 > 面试题库 >

在.txt文件中找到最常用单词的Python程序,必须打印单词及其计数

辛盛
2023-03-14
问题内容

截至目前,我有一个函数替换countChars函数,

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

但是当我运行该程序时,它会吐出这种可憎的东西(这只是一个例子,它旁边大约有两页单词,其中有一个很大的数字)

before 1478
battle-field 1478
as 1478
any 1478
altogether 1478
all 1478
ago 1478
advanced. 1478
add 1478
above 1478

虽然显然这意味着代码足够运行,但我并没有从中得到想要的东西。它需要打印每个单词在文件中的次数(gb.txt,这是葛底斯堡的地址)。显然,文件中的每个单词不在其中的次数恰好是1478次。

我在编程方面还很陌生,所以有点困惑。

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()

问题答案:

如果您需要计算段落中的单词数,则最好使用正则表达式

让我们从一个简单的例子开始:

import re

my_string = "Wow! Is this true? Really!?!? This is crazy!"

words = re.findall(r'\w+', my_string) #This finds words in the document

结果:

>>> words
['Wow', 'Is', 'this', 'true', 'Really', 'This', 'is', 'crazy']

请注意,“是”和“是”是两个不同的词。我的猜测是,您希望对它们进行相同的计数,因此我们可以将所有单词大写,然后对其进行计数。

from collections import Counter

cap_words = [word.upper() for word in words] #capitalizes all the words

word_counts = Counter(cap_words) #counts the number each time a word appears

结果:

>>> word_counts
Counter({'THIS': 2, 'IS': 2, 'CRAZY': 1, 'WOW': 1, 'TRUE': 1, 'REALLY': 1})

你准备好了吗?

现在,我们需要做的与上次完全相同,只是这次我们正在读取文件。

import re
from collections import Counter

with open('your_file.txt') as f:
    passage = f.read()

words = re.findall(r'\w+', passage)

cap_words = [word.upper() for word in words]

word_counts = Counter(cap_words)


 类似资料:
  • 问题内容: 我试图加快我的项目以计算单词频率的速度。我有360多个文本文件,我需要获取单词的总数以及另一个单词列表中每个单词出现的次数。我知道如何使用单个文本文件执行此操作。 要获得“通货膨胀”,“工作”,“产出”个体的频率过于繁琐。我可以将这些单词放入列表中并同时查找列表中所有单词的出现频率吗?基本上,这与Python。 示例:代替此: 我想这样做(我知道这不是真实的代码,这是我在寻求帮助的内容

  • 所以我做了一个函数 因此,它所做的是获取一个字符串,将其拆分,并生成一个字典,其中键是单词,值是它出现的次数。 好的,我现在要做的是,做一个函数,它接受这个函数的输出,并产生一个如下格式的列表- ((超过1个字母的单词列表),(最常用单词列表),(最长单词列表)) 另外,例如,假设两个单词出现了3次,并且两个单词都有6个字母长,那么这两个单词都应该包含在(最频繁的)和(最长的)列表中。 因此,到目

  • 我试图在bash中使用cat生成一个文件,在bash中,我已经运行了一个脚本,我保存到一个变量中,然后将在cat中使用。为了运行脚本并将输出保存到变量,我使用了以下方法: 接下来,我将展示一个cat文件的摘录,其中使用了变量RESULT。 运行bash后,我得到的是变量RESULT的正确输出。但是,文件开头有一个单词echo(如下所示)。这是有问题的,因为我试图自动化代码,添加echo这个词会破坏

  • 我指的是学习 C 的 K 和 R 书;它是关于在字数统计程序中使用 EOF 的 while 循环,书中给出的程序运行良好,但我想知道它如何在一次输入后停止接受输入并给出带有行、单词、 请帮助我理解这个程序中到底发生了什么来打破循环。 附加代码和输出 -

  • 问题内容: 我正在尝试查找文件中出现的单词数。我有一个文本文件(),文件内容如下: 我期望的结果是: 我使用的代码是: 我得到的结果是: 谁能帮帮我吗?提前致谢 。 问题答案: 使用计数器的方法。例: 输出:

  • 问题内容: 这是我的代码: …它打印: 如何打印“哈哈”? 更新: 当我使用以下代码时: …它打印。那不是我想要得到的。 我的IDE是Ulipad,这是IDE的错误吗? 第二次更新: 此代码将正确打印字符: …当我使用这个: …要么… …这是行不通的。如何正确打印变量? 谢谢 问题答案: 您首先需要声明一个编码,因为错误消息说得很清楚- 它甚至告诉您在这里查看详细信息!您的编码大概是。 顺便说一句