012
一、方法论
- 对于文件:做到有始有终
- 就像记东西,先启动大脑的记忆状态,将信息储存在大脑的缓存区,然后记忆完毕后关闭此时的进程,执行其他的进程。
def fenci(txt):
f=open(txt,'r')
datas=f.read()
f.close()
- 对缓存的信息进行处理与加工(这里是
分词
)
import jieba
# 采用经典的精确模式,并将分词结果储存在 data 中
data = jieba.lcut(datas)
d = {}
# 遍历分词结果
for i in data:
# 如果分词的长度大于等于 2:
if len(i) >= 2:
# dict.get 获取某个键的值
# 键 i 存在,返回默认值,不存在返回 0+1=1
d[i] = d.get(i,0)+1
# 将键值对的字典视图转换成列表,储存在变量 lt 中
lt = list(d.items())
# 返回统计的数据,提取统计的次数,并按降序排列。
lt.sort(key = lambda x:x[1],reverse = True)
# 返回排序后的列表
return lt
- 向人们展示分词的列表
# 定义一个展示该列表的函数
def show(lt):
# 先遍历前 9 个元素:
# 原因是先观察:前 9 个元素是按照逗号分隔的
# 或者是前 9 个是以逗号结尾的
for i in lt[:9]:
# 分的词1:次数,分的词2:次数......
print(i[0],':',i[1],end=',',sep='')
# 打印第 10 个数据
print(lt[9][0],':',lt[9][1],sep='')
- 需要注意的是:前9个都是以逗号分隔,因此
end
的参数为西点逗号,而sep为空。 - 再次强调:
end 默认是换行,sep 默认为一个空格
调用函数:
# 将文件 2018 的分词结果存在 l1 中,这里就是调用函数的语句,与平时不一样的在于:这里的实参是一个.txt 的文件。
# 函数的作用就是可以实现代码的复用。
l1=fenci('data2018.txt')
l2=fenci('data2019.txt')
print('2019:',end='',sep='')
# 调用展示函数
show(l2)
print('2018:',end='',sep='')
show(l1)
总代码:
import jieba
# 定义一个分词的函数,形参为位置参数
def fenci(txt):
'''首先打开文件,以只读模式,并将结果储存在f 中'''
f=open(txt,'r')
# 按行读取,并将结果保存在数据datas中
datas=f.read()
# 关闭文件
f.close()
# 采用精确模式
# 并将分词的结果保存在data中
data=jieba.lcut(datas)
d = {}
# 遍历分词结果
for i in data:
# 如果分词的长度大于2:
if len(i)>=2:
# dict.get 获取某个键的值
# 键i存在,返回默认值,不存在返回 0+1=1
d[i]=d.get(i,0)+1
# 将键值对转换成列表
lt = list(d.items())
# 返回统计的数据,按降序排列
lt.sort(key = lambda x:x[1],reverse = True)
# 返回排序后的列表
return lt
# 定义一个展示该列表的函数
def show(lt):
# 从 0 遍历到 8
for i in lt[:9]:
# 分的词1:次数,分的词2:次数......
print(i[0],':',i[1],end=',',sep='')
# 打印第九个数据
print(lt[9][0],':',lt[9][1],sep='')
# 将文件 2018 的结果存在 l1 中
l1=fenci('data2018.txt')
l2=fenci('data2019.txt')
print('2019:',end='',sep='')
# 调用函数
show(l2)
print('2018:',end='',sep='')
show(l1)
易错点:
- 展示函数中,左后一行的
print()
的end
参数不能是空,因为end
默认是换行,如果设置为空,那么结果就是一行,就不会按照年份进行换行了。
def show(lt):
for i in lt[:9]:
print(i[0],':',i[1],end=',',sep='')
print(lt[9][0],':',lt[9][1],end='',sep='')#
结果:
2019:改革:17,发展:17,推进:15,加强:10,创新:9,企业:8,提高:7,实施:6,取得:6,全面:62018:改革:31,发展:27,加强:16,创新:15,推进:14,制度:14,经济:13,坚持:12,实施:12,实现:11
如果一开始就是这样:
def show(lt):
for i in lt[:9]:
print(i[0],':',i[1],end=',',sep='')
print(lt[9][0],':',lt[9][1],sep='')#
result:
2019:改革:17,发展:17,推进:15,加强:10,创新:9,企业:8,提高:7,实施:6,取得:6,全面:6
2018:改革:31,发展:27,加强:16,创新:15,推进:14,制度:14,经济:13,坚持:12,实施:12,实现:11
>>>
- 需要注意的是,下面的代码块中注意逗号,不要遗漏!
def show(lt):
for i in lt[:9]:
print(i[0],':',i[1],end=',',sep='')#
- 上面的代码是遍历的元素
i
,而不是列表lt
!否则运行结果就为:
2019:('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),('改革', 17):('发展', 17),全面:6
2018:('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),('改革', 31):('发展', 27),实现:11
>>>
二、方法论
1. 对分词函数的拆解:
- 文件的操作:打开,储存,关闭
f=open(txt,'r')
datas=f.read()
f.close()
- 对文件的分词
data=jieba.lcut(datas)
- 对分词结果去重
s = set(data)
- 对分词结果的统计
lt = []
for i in s:
if len(i)>=2:
lt.append(i)
- 将以上的代码封装在函数中
- 别忘了导入
jieba
库 - 一般函数都有返回值
import jieba
def fenci(txt):
f=open(txt,'r')
datas=f.read()
f.close()
data=jieba.lcut(datas)
s = set(data)
lt = []
for i in s:
if len(i)>=2:
lt.append(i)
return ls
2. 调用 fenci()
函数,找共性与特性
- 值传递:分别导入文件
l1=fenci('data2018.txt')
l2=fenci('data2019.txt')
- 创建一个共有的列表:若遍历
2018
的分词列表,在2019
中也存在,将该元素追加(可以通俗的说:添加)至l3
l3=[]
for i in l1:
if i in l2:
l3.append(i)
- 以共性找特性:(如何理解?)
for i in l3:
l1.remove(i)
l2.remove(i)
3. 调用 show()
函数,用于展示列表
- 先调用函数:(易错点:信息的对应关系,不要对应错误。)
print('共有词语:',end='',sep='')
show(l3)
print('2019特有:',end='',sep='')
show(l2)
print('2018特有:',end='',sep='')
show(l1)
- 创建一个
show()
函数:将列表lt
用逗号组合起来。
def show(lt):
print(','.join(lt))
代码如下:
import jieba
def fenci(txt):
f=open(txt,'r')
datas=f.read()
f.close()
data=jieba.lcut(datas)
s = set(data)
lt = []
for i in s:
if len(i)>=2:
lt.append(i)
return ls
def show(lt):
print(','.join(lt))
l1=fenci('data2018.txt')
l2=fenci('data2019.txt')
l3=[]
for i in l1:
if i in l2:
l3.append(i)
for i in l3:
l1.remove(i)
l2.remove(i)
print('共有词语:',end='',sep='')
show(l3)
print('2019特有:',end='',sep='')
show(l2)
print('2018特有:',end='',sep='')
show(l1)