# 导入正则表达式相关模块
import re
# 定义一个函数,通过该函数查找文本字符串中的每一个单词
# 然后计算每个单词出现的次数,最后按照出现次数从多到少放到变量中
def get_char(txt):
# 通过re.split()函数将英文单词分别取出来,函数的第一个参数是分隔符
# 第一个参数指定以":" ";" "," "." """ 和空格(\s)以及0个或多个空格(\s*)作为分隔符
# 第二个参数是要拆分的字符串
# 通过以下代码把字符串分成一个个单词(以分隔符划分)
# 将分隔出来的单词放到列表变量vlist中
vlist = re.split('[:;,."\s]\s*', txt)
# 生产字典变量
vdic_frequency = dir()
# 遍历列表变量
for vchar in vlist:
# 取出每个单词 并判断字典中是否存在一个元素项(键值对)
# 该项键名是以该单词命名
if vchar in vdic_frequency:
# 如果存在,将该单词命名的键的值加1
vdic_frequency[vchar] += 1
else:
vdic_frequency[vchar] = 1
# 对字典中的项按键值进行排序,并且是倒叙排序(reverse=True)
vdic_sort = sorted(vdic_frequency.items(), key=lambda item: item[1], reverse=True)
return vdic_sort
# 主函数为main
if __name__ == '__main__':
# 打开文件,读出文件文本
# 其中test.txt 文件是当前目录下的一篇英文文章,文本类型
with open('test.txt', 'r') as f:
vtext = f.read()
# 调用排序函数
vstr = get_char(vtext)
print('列出文本中的英文单词:\n')
# 在终端上打印文本中的单词
print(vstr)
(1)get_char()函数的主要流程是:首先用re模块的split()函数对字符串进行分割,这里主要注意的是split()函数的第一个参数实际上是一个正则表达式它能识别多个分隔符,以上实现正确分隔英文单词的目标。split()函数返回一个列表变量,这个列表变量中的每一项是一个单词,接着把单词从列表中取出来加入字典中,这个字段的键名用单词命名,键值用这个单词的在字符串中出现的次数赋值,实现的方式是通过循环遍历列表统计出每个单词出现的次数,然后用统计出的数据修改字典,最后按字典单词何该单词出现的次数两个值组成
(2)主函数的流程是从一个文本 文件中读入一个英文长字符串,然后调用get_char()函数取值一个列表变量,再将这个列表变量的内容打印到终端,这样就看到了文本文件的所有英文单词