【发布时间】:2015-06-02 10:43:48
【问题描述】:
我正在尝试读取一个文本文件,去掉标点符号,将所有内容设为小写,然后打印单词总数,唯一单词的总数(例如,如果它在文本中,则表示“a” 20 次,只计算一次),然后打印出现频率最高的单词及其频率(即 a:20)。
我意识到 StackOverflow 上有类似的问题,但我是一个初学者,我正在尝试使用最少数量的导入来解决这个问题,并且想知道是否有办法对此进行编码而不是导入类似 Collections 的东西。
下面有我的代码,但我不明白为什么我没有得到我需要的答案。此代码正在打印整个文本文件(每个单词换行,所有标点符号都被删除),然后打印:
e 1
n 1
N 1
o 1
我认为,“无”按其频率分成字符。为什么我的代码给了我这个答案,我可以做些什么来改变它?
代码如下:
file=open("C:\\Users\\Documents\\AllSonnets.txt", "r")
def strip_sonnets():
import string
new_file=file.read().split()
for words in new_file:
data=words.translate(string.punctuation)
data=data.lower()
data=data.strip(".")
data=data.strip(",")
data=data.strip("?")
data=data.strip(";")
data=data.strip("!")
data=data.replace("'","")
data=data.replace('"',"")
data=data.strip(":")
print(data)
new_file=strip_sonnets()
new_file=str(new_file)
count={}
for w in new_file:
if w in count:
count[w] += 1
else:
count[w] = 1
for word, times in count.items():
print (word, times)
【问题讨论】: