词频统计需要考虑下列几个问题:
- 英文单词的分隔符可以是空格、标点符号或者特殊符号,使用字符串的 replace()方法可以将标点符号替换为空格,以提高获取单词的准确性。
- 用 split()函数可以拆分字符串,生成单词的列表。
- 逐个读取列表中的单词,并重复下面的操作。如果字典 map1的 key 值中没有这个单词,向字典中添加元素,关键字是这个单词,值是1,即 map1 [ word ]=1;如果字典的 key 值中有这个单词,则该单词计数加1,即 map1 [ word ]=1;当列表中的单词全部读取完后,每个单词出现的次数会被放在字典map1中, map1的 key 是单词, map1的 value 是单词出现的次数。
- 为了得到比较好的输出结果,将字典转换为列表后,排序输出。
例 5-17 统计英文句子中单词出现的次数:
#ex0517.py
sentence ='Beautiful is better than ugly . Explicit is better than implicit .\
Simple is better than complex . Complex is better than complicated .'
#将文件中涉及的标点用空格替换
for ch in ",.?!":
sentence = sentence.replace(ch," ")
#利用字典统计词频
words = sentence.split()
map1 = {}
for word in words:
if word in map1:
map1[word] += 1
else:
map1[word] = 1
#对统计结果排序
items = list(map1.items())
items.sort(key = lambda x:x[1],reverse = True)
#打印控制
for item in items:
word,count = item
print("{:<12}{:>5}".format(word,count))