# 导入正则表达式相关模块 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()函数取值一个列表变量,再将这个列表变量的内容打印到终端,这样就看到了文本文件的所有英文单词
标签:函数,python,列表,单词,frequency,vdic,文本,分词 From: https://www.cnblogs.com/vigo01/p/16607164.html