6.算法编程练习:词频统计(1)

1. 题目

从data.txt文件读入一篇文章《从清华到MIT》,用 jieba 库的函数 lcut 的全模式做分词,统计词汇长度为 2 的词出现的次数,输出出现次数最多的前 10 个词汇及其出现次数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

2. 分析

读入,分词,定义一个字典存次长为2的词并将出现的频数统计为字典的关键字值,然后排序,遍历前十条,利用字符串格式化进行数据匹配并打印。
文本分词用jieba库里面的lcut类方法,参数arg1传入读取的文本str类型,参数**kwarg2cut_all=True。

3. 代码

import jieba
dk = {}
with open('data.txt','r') as f:
    sl = f.readlines()
for s in sl:
    key=jieba.lcut(s, cut_all=True)
    for wo in key:
        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]))

注释版

This is a python123.io file.
'''
import jieba        # 导入jieba中文分词库
dk = {}             # 定义dk字典变量 type(dk):<class 'dict'>

#使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。
#例如file的file.close()方法,无论with中出现任何错误,都会执行file.close()方法

#以指定utf-8编码只读方式打开data.txt文件,文件句柄命名为f
with open('data.txt','r',encoding = "utf-8") as f:  
    sl = f.readlines()

#print(type(f))    f是<class '_io.TextIOWrapper'>文件句柄的类型
#print(type(sl))   sl是一个列表,包含了文件中每一行内容
#print(type(sl[0]))  sl[0]是列表sl中第一个元素,是文件中第一行所有内容

for s in sl:        #循环读取列表元素
    k =jieba.lcut(s, cut_all = True)
    #对每个s,使用jieba.lcut函数以全模式方式返回一个列表(由词语组成)
    for wo in k:    #对每个词语进行筛选
        if len(wo) == 2:    #如果词语的长度为2,进行统计
           dk[wo] = dk.get(wo,0) + 1
           #逐步构建统计字典,形式如{"大学":1,"设计":2,...},备注,这里的1、2是逐渐变化中

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

4. 小结

jieba库做分词,是NLP第一步,功能强大,使用便捷,简要介绍见如下超链接。
jieba库参数简介
本题来自python123题目,只作为个人学习使用,未经允许请勿转载。

致谢

thanks for reading

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值