python编程100例_ 1.3实例3 对文本进行分词
编程要点:
字符串的分隔和排序功能
(1) 使用split()函数实现一个分隔符来分隔一个字符串
字符串.split(参数)
功能:实现一个分隔符来分隔字符串的功能
字符串:需要分隔的字符串
参数:一个分隔符
split()函数把传入的参数(字符串)当作一个整体的分隔符
代码实现:
# 需要分隔的字符串
vstring = '人生苦短,我用python!'
# 设置单个分隔符
str = ','
def split_str_by_one(vstring,str):
"""一个分隔符来分隔一个字符串"""
vret = vstring.split(str)
return vret
print(split_str_by_one(vstring, str), len(split_str_by_one(vstring, str)))
打印输出:
['人生苦短', '我用python!'] 2
(2) 使用re模块的split()函数实现多个分隔符来分隔一个字符串
re.split(参数1,参数2)
功能:实现多个分隔符来分隔字符串的功能
参数1:是一个正则表达式
参数2:是要分隔的字符串
在这个字符串中凡是匹配到第一个参数指定的表达式中的字符都可以成为分隔符
代码实现:
import re
def split_str_by_many(str, vstring):
"""对多个分隔符分别对字符串进行分隔"""
vret = re.split(str, vstring)
return vret
# 需要分隔的一个字符串
vstring = '人生苦短,我用python!python高级、优雅,很多人喜欢。ok'
# 分隔符号
str = '[,!、。]'
print(split_str_by_many(str,vstring), len(split_str_by_many(str,vstring)))
打印输出:
['人生苦短', '我用python!python高级', '优雅', '很多人喜欢', 'ok'] 5
(3) 使用sorted()函数对字典类型进行排序,按照字典key或value的值
sorted(参数1,参数2)
参数1:参与排序的字典的各项
参数2:key,key通过一个lamba函数的返回值指定参与排序的数据项
lambda函数中的item表示字典中的元素项,每个元素项都由键名和键值组成,
item[0]表示键名,item[1]表示键值
返回值:用item[1]将键值返回给key表示以键值大小作为排序一句对字典中各项进行排序
代码实现:
dict={
'a':100,
'b':90,
'c':200,
'd':10,
'e':88
}
def sorted_dict_by_key(dict):
"""对字典按照key值进行排序"""
vret = sorted(dict.items(), key=lambda item: item[0])
return vret
def sorted_dict_by_value(dict):
"""对字典按照value值进行排序"""
vret = sorted(dict.items(),key=lambda item: item[1])
return vret
print(sorted_dict_by_key(dict), len(sorted_dict_by_key(dict)))
print(sorted_dict_by_value(dict),len(sorted_dict_by_value(dict)))
打印输出:
[('a', 100), ('b', 90), ('c', 200), ('d', 10), ('e', 88)] 5
[('d', 10), ('e', 88), ('b', 90), ('a', 100), ('c', 200)] 5
对文本进行分词
代码实现:
# 对文本进行分词
# 将文本文件中的英文单词找出来(进行分词),并统计每个单词出现的次数
import re
# 定义一个函数,通过函数查找到文本字符串中的每个单词
# 计算每个单词出现的次数,最后按照出现次数从多到少放到列表变量中
def get_char(txt):
"""查找文本字符串中的每个单词"""
'''
1.通过re.split()函数将英文单词分别取出来,函数的第一个参数是分隔符
2.第1个参数是以“:” "," "." """ 和 空格(\n)以及0 或多个空格(\s*)作为分隔符
3.第2个参数是要拆分的字符串
'''
vlist = re.split('[:;,."\s]\s*',txt)
# 生成字典变量
vdic = dict()
# 遍历列表变量vlist
for vchar in vlist:
# 取出每个单词,并判断字典中是否存在一个元素项(键值对)
if vchar in vdic:
# 如果存在,将以单词命名的键的值+1
vdic[vchar] += 1
else:
# 不存在,增肌一个以单词命名的键,并设置其简直为1
vdic[vchar] = 1
# 对字典中的项按键值进行排序,并且是倒序(reverse=True)
vdic_sort = sorted(vdic.items(), key=lambda item: item[1], reverse=True)
return vdic_sort
if __name__ == '__main__':
# 打开文件,读取文件的文本
with open('text.txt','r') as f:
vtext = f.read()
# 调用排序函数
vstr = get_char(vtext)
print('列出文本中的英文单词:\n')
# 在终端上打印文本中的单词
print(vstr)
文本文件text.txt
Traceback (most recent call last):
File "C:\Users\18268\PycharmProjects\python100days\main.py", line 31, in <module>
with open('text.txt','r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'text.txt'
打印输出:
[('', 2), ("txt'", 2), ('Traceback', 1), ('(most', 1), ('recent', 1), ('call', 1), ('last)', 1), ('File', 1), ('C', 1), ('\\Users\\18268\\PycharmProjects\\python100days\\main', 1), ('py', 1), ('line', 1), ('31', 1), ('in', 1), ('<module>', 1), ('with', 1), ("open('text", 1), ("'r')", 1), ('as', 1), ('f', 1), ('FileNotFoundError', 1), ('[Errno', 1), ('2]', 1), ('No', 1), ('such', 1), ('file', 1), ('or', 1), ('directory', 1), ("'text", 1)]