j01词频的统计
f.read()和f.readlines()数据类型
- 前者是字符串类型,后者是列表类型;而jieba.lcut(‘str’)
lcut()和lcut(,True)的区别
- jieba.lcut()函数返回精确模式,输出的分词能够完整且不多余地组成原始文本;jieba.lcut(,True)函数返回全模式,输出原始文本中可能产生的所有词组,冗余性太大
- 以本人代码和书上参考答案说明二者的具体区别:
import jieba
dk = {}
with open('data.txt','r',encoding='utf8') as f:
words = f.read()
print(type(words))
word1 = jieba.lcut(words,True) #因为word是str类型,所以可以直接用jieba函数,同时如果使用lcut(word)得到的统计结果将会不同。
for word in word1:
if len(word) == 2:
dk[word] = dk.get(word,0) + 1
dp = list(dk.items())
dp.sort(key= lambda x:int(x[1]), reverse = True)
for i in range(10):
print(dp[i][0],dp[i][1],end='\n')
<class 'str'>
大学 21
设计 20
美国 16
清华 15
学生 14
教授 12
课程 11
一个 10
国大 8
计算 8
import jieba
dk = {}
with open('data.txt','r',encoding='utf8') as f:
sl = f.readlines()
print(type(sl))
for s in sl:
k=jieba.lcut(s, cut_all = True)
for wo in k:
if len(wo)==2:
dk[wo] = dk.get(wo,0) + 1
dp = list(dk.items())
dp.sort(key= lambda x:int(x[1]), reverse = True)
for i in range(10):
print("{}:{}".format(dp[i][0],dp[i][1]))
<class 'list'>
大学:21
设计:20
美国:16
清华:15
学生:14
教授:12
课程:11
一个:10
国大:8
计算:8
j02分词去重
写入文件的错误方式#f.write(word,end=‘\n’)
import jieba #导入中文分词库
f = open('out1.txt','w') #以写的方式打开out1.txt文件
fi = open("data.txt","r",encoding="utf-8") #以读的方式打开data.txt文件
#使用jieba.lcut()对data.txt文件读出字符串进行中文分词,返回列表lst
lst = jieba.lcut(fi.read())
s = set(lst) #使用set函数将列表lst转换为集合,实现元素去重
s1 = sorted(s) #将列表按字符顺序排序
ls = list(s1) #将集合重新变成列表ls
for item in ls: #遍历去重后ls每一个元素
if len(item) >=3:
#f.write(word,end='\n')
f.write(item + "\n") #将符合条件的字符串写入out1.txt中
fi.close() #关闭文件fi
f.close() #关闭文件f
字符串分词
import jieba
s ='''人工智能是包括十分广泛的科学,
它由不同的领域组成,如机器学习,计算机视觉等等,
总的说来,人工智能研究的一个主要目标是使机器能够胜任
一些通常需要人类智能才能完成的复杂工作。但不同的时代、
不同的人对这种“复杂工作”的理解是不同的。'''
ls = jieba.lcut(s)
print(ls)
1 结巴库jieba的导入
2 jieba.lcut()函数是分词的精确模式,返回一个列表类型。
jieba分词
import jieba
Tempstr = input()
ls = jieba.lcut(Tempstr)
print(ls)
中文词数统计
import jieba
# s = '“工业互联网”实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。'
s = input()
s = s.replace(',','').replace('。','').replace('、','').replace('“','').replace('”','')
k = jieba.lcut(s)
for i in k:
print(i, end= "/ ")
print("\n中文词语数是:{}".format(len(k)))
- 用 jieba 分词处理词汇统计
- 要处理掉输入的各种标点符号,用replace()函数
- 用字典保存各个词出现次数
字符串统计
import jieba
s = input() # 请输入一个中文字符串,包含逗号和句号
s = s.replace(",","").replace("。","")
n = len(s)
k=jieba.lcut(s)
m = len(k)
for i in k:
print(i, end= "/ ")
print("\n中文词语数为{}。".format(m))
print("中文字符数为{}。".format(n))
jieba分词统计
import jieba #导入中文分词库jieba
import turtle as t #导入turtle库,并给turtle去一个别名t
def drawCircle(x,y,radius,color,name): #自定义函数drawCircle,包含了5个参数
t.pencolor(color) #设置绘圆的颜色,color是一个必选参数,调用函数时可以设置为'red'、'blue'...
t.penup() #绘图笔提前起来,表示不落下去绘图,
t.goto(x, y) #将笔的坐标定位到(x,y),x,y都是必选参数
t.write(name, font=('Arial', 10, 'normal')) #在当前的(x,y),写上name内容,文字属性由font决定。name是必选参数
t.seth(-90) #将绘图方向设置为-90度方向
t.pendown() #绘图笔放下,表示落下去绘图,有颜色啦:)
t.circle(radius) #按半径为radius绘制圆形
return t.pos() #返回t.pos()当前的位置,例如:(-300.00,0.00)
dws = {} #定义一个字典,注意不是集合哦
with open('lizhi.txt', 'r',encoding="utf-8") as f: #用with语句以只读方式打开lizhi.txt文件
for l in f.readlines(): #遍历列表f.readlines()中的每一个元素
ws = jieba.lcut(l.strip('\n')) #去掉行字符串最后的"\n"不可显示换行符,
#使用jieba.lcut(str)函数进行中文分词,返回一个列表
for w in ws:
if len(w) >= 2: #统计词语长度>=2 的词语出现频次
dws[w] = dws.get(w,0) + 1 #逐步构建字典dws,词语:次数的键值对
#如果w在dws的keys中,则键值+1,如果w不在dws的keys中,则构建健值对dws[w] = 0 + 1
dls = list(dws.items()) #将dws.items()转换为列表并赋值给dls,形如[("abc",10),("edf","12"),...],目前是无序的
dls.sort(key = lambda x:x[1], reverse= True) #对dls进行排序,按列表元素中索引为1,这行代码考试时会给出。但一定要理解。
x,y = -300,0 #设置初始坐标位置
for i in range(10): #根据统计结果绘制图形
print(dls[i][0],dls[i][1]) #输出结果
x,y = drawCircle(x,y,dls[i][1]*4 ,'red',dls[i][0]+str(dls[i][1])) #调用绘图函数实现绘图
x += dls[i][1] * 8 #改变x初始位置,y值不变
t.done()
词频统计
import jieba #导入中文分词库,这是必考点
with open("sgld.txt","r",encoding ="utf-8")as f: #使用with语句以只读方式打开文件
lssgld = f.readlines() #按行读取文件构建lssgld列表
d = {} #定义空字典
for ls in lssgld:
ls = ls.replace("\n","") #数据清洗:去掉每一行最后的换行符
for c in "。,:”“ ": #中文分词前,将中文逗号、中文句号、中文冒号、中文引号,英文空格替换为空字符
ls = ls.replace(c, "") #使用字符串函数replace将
wordlist = jieba.cut(ls) #对每行进行中文分词
for word in wordlist:
d[word] = d.get(word,0) + 1 #构建字典
ls = list(d.items())
ls.sort(key=lambda x:x[1], reverse = True) #列表排序
for i in range(5):
a = ls[i][0]
print("{}".format(a),end = "、") #出现次数前5的词