1 《从清华到MIT》词频统计
类型:Python 组合数据类型
从data.txt文件读入一篇文章《从清华到MIT》,用 jieba 库的函数 lcut 的全模式做分词,统计词汇长度为 2 的词出现的次数,输出出现次数最多的前 10 个词汇及其出现次数。
示例1:
输入:从data.txt文件读入
输出:"
大学:21
设计:20
美国:16
清华:15
学生:14
教授:12
课程:11
一个:10
国大:8
计算:8
"
本题所用到的文章 参考http://www.qianmu.org/article/3865.htm 保存在记事本里即可
#在_____处填写一行代码
#在…处填写多行代码
#不允许修改其他代码
import jieba
dk = {}
with open('data.txt','r') as f:
…
dp = list(dk.items())
dp.sort(key= lambda x:int(x[1]), reverse = True)
…
1.1 代码
#在_____处填写一行代码
#在…处填写多行代码
#不允许修改其他代码
import jieba
dk = {}
with open('data.txt','r') as f:
lf = f.readlines()
for i in lf:
ls = jieba.lcut(i,cut_all=True)
for j in ls:
if len(j)==2:
if j in dk:
dk[j] += 1
else:
dk[j] = 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]))
2 文件的打开
with open('data.txt', 'r', encoding='utf-8') as f:
print(f.read())
# ...more code
3 jieba
3.1 简介
jieba分词的三种模式:精确模式、全模式、搜索引擎模式
精确模式:把文本精确的切分开,不存在冗余单词
全模式:把文本中所有可能的词语都扫描出来,有冗余
搜索引擎模式:在精确模式基础上,对长词再次切分
3.2 常用函数
函数 | 描述 |
jieba.lcut(s) | 精确模式,返回一个列表类型的分词结果 |
jieba.lcut(s,cut_all=True) | 全模式,返回一个列表类型的分词结果,存在冗余 |
jieba.lcut_for_search(s) | 搜索引擎模式,返回一个列表类型的分词结果,存在冗余 |
jieba.add_word(w) | 向分词词典增加新词w |
3.3 例子
from jieba import *
str1 = "知识产权是由人类智力劳动成果依法产生的专有权利。"
print(lcut(str1))
print(lcut_for_search(str1))
print(lcut(str1,cut_all=True))
输出
['知识产权', '是', '由', '人类', '智力', '劳动成果', '依法', '产生', '的', '专有', '权利', '。']
['知识', '产权', '知识产权', '是', '由', '人类', '智力', '劳动', '成果', '劳动成果', '依法', '产生', '的', '专有', '权利', '。']
['知识', '知识产权', '产权', '是', '由', '人类', '智力', '劳动', '劳动成果', '成果', '依法', '产生', '的', '专有', '专有权', '有权', '权利', '。']
4 练习
4.1 问题1
用 jieba 分词,计算字符串 s 中的中文词汇个数,不包括中文标点符号。显示输分词后的结果,用”/ ”分隔,以及中文词汇个数。
输入
工业互联网实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。
输出
工业/ 互联网/实施/ 的/ 方式/是/ 通过/ 通信/控制/ 和/ 计算技术/的/ 交叉/ 应用/建造/ 一个/ 信息/物理/ 系统/ 促进/物理/ 系统/ 和/数字/ 系统/ 的/融合/
中文词语数是:27
4.1.1 代码
做完再看from jieba import *
s = input()
for i in s:
if i in ['、',',','。']:
s = s.replace(i,'')
ls = lcut(s)
print('/'.join(i for i in ls))
print('中文词语数是:{}'.format(len(ls)))
4.2 问题2
在问题1的基础上,统计分词后的词汇出现的次数,用字典结构保存。显示输出每个词汇出现的次数,以及出现次数最多的词汇。如果有多个词汇出现次数一样多,都要显示出来。
输入
工业互联网实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。
输出
工业:1
互联网:1
实施:1
的:3
方式:1
是:1
通过:1
通信:1
控制:1
和:2
计算技术:1
交叉:1
应用:1
建造:1
一个:1
信息:1
物理:2
系统:3
促进:1
数字:1
融合:1
出现最多的词是(的 系统):3次
4.2.1 代码
做完再看from jieba import *
from collections import *
s = input()
for i in s:
if i in ['、',',','。']:
s = s.replace(i,'')
ls = lcut(s)
dict1 = Counter(ls)
for i in dict1.keys():
print('{}:{}'.format(i,dict1[i]))
ls1 = sorted(dict1,key=lambda x:dict1[x],reverse=True)
str = ls1[0]
for i in range(0,len(ls1)):
if dict1[ls1[i]] == dict1[ls1[i+1]]:
str = str + ' ' +ls1[i+1]
else:
break
print('出现最多的词是({}):{}次'.format(str,dict1[ls1[0]]))