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]]))