当前位置: 首页 > news >正文

Python二级编程:分词去重

一、原题

参考编程模板,完善代码,实现以下功能。‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‫
利用 jieba 库实现中文分词。对分词后的列表进行去重处理,然后将分词结果中字符数大于等于 3 的词语,按照字符顺序排序,写入到文件 out1.txt 文件中。‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‫‫‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‫
out1.txt 文件中每一行是分词后的一个词语。形式如下所示:‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‫‫

 二十一
美国麻省理工学院
语言学
形象思维
突破性
总的来说
思维科学
软硬件
尼尔逊
温斯顿
机器人‪‪‪‪‪‫‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‫‫
......

二、题目分析

原题主要考察:1. jieba分词 2. 文本的打开与写入 3. for 循环和if 条件判断。

算法:可以用open()来打开文件,jieba进行分词,获得句柄后用write写入,由于是按行写入,注意添加换行符。

另外题目中还提到要把结果去重,所以可以用set进行去重。

三、两种解法

1. 官方答案

答案:特点是紧扣大纲,中规中矩,代码易于理解,不好的是代码过多,有时可能会漏掉关闭文件。

# -*- coding:utf-8 -*-
'''
This is a python123.io file.
'''
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(item + "\n")  #将符合条件的字符串写入out1.txt中
fi.close()  #关闭文件fi
f.close()   #关闭文件f

2. 个人解法

主要是用列表推导式,把for循环、if条件写在了一起,最后用writelines写入文件

with open("data.txt","r",encoding="utf-8") as f:text = f.read()fenci = jieba.lcut(text)lst = [elm for elm in fenci if len(elm)>=3]  #去除字符长度小于3的短语
with open('out1.txt','w') as fi:fi.writelines([i+"\n" for i in sorted(set(lst))]) #用writelines写入去重和排序后的列表。

个人解法比参考答案减少五行代码。主要原因在于用with open()取代了open,这样可以提升程序运行的效率,避免了因忘记关闭文件而程序报错的情况。

四、学后反思

  1. 学习要有日拱一卒的精神,坚持自己先审题、分析、做题、写代码,然后对比参考答案,找到自己存在的不足,想想如何改进自己,或者如何优化参考答案。
  2. 可以用with open(),writelines和列表推导式优化代码,提升程序运行效率。

 

http://www.lryc.cn/news/90481.html

相关文章:

  • Android Wifi开发——Wifi锁(十九)
  • Nginx的优化与防盗链
  • STP协议
  • 方法——检查参数的有效性
  • 七、Docker仓库之nexus搭建(四)
  • MySQL 锁机制
  • HACKER KID: 1.0.1实战演练
  • Android车载学习笔记1——车载整体系统简介
  • Apache Doris
  • GB28181 对接海康平台,解决音视频卡顿问题
  • Linux系统编程面试题
  • 计算机网络 - 网络层的数据平面
  • 《Spring Guides系列学习》guide41 - guide45
  • 数据库基础——1.数据库概述
  • 2023 光亚展|乐鑫将携 AI、Wi-Fi 6、私有云和 Matter 方案精彩亮相
  • 用反射设计通用的实例化对象方案
  • 破坏单例模式--存在的问题---问题的解决
  • SpringCloud微服务踩坑系列-java.lang.IllegalStateException
  • Linux-地址空间
  • 【EKS】基于Amazon EKS搭建kubernetes集群
  • Tomcat安装与启动和配置
  • ruoyi-vue版本(十八)创建自己的项目,使用若依里面的技术,多数据源的实现
  • C++-stack题型->最小栈,栈的压入与弹出,逆波兰表达式
  • 【计算机网络实验】BGP和OSPF协议仿真实验
  • 提升日期处理效率:day.js 实战经验分享
  • mysql中的count(1)、count(*)、count(id)哪个更快?
  • cf1750E Bracket Cost
  • Vue+springboot医院住院挂号登记收费系统7ui9s
  • 大前端之Koa2学习
  • Qml实现Dock浮动、停靠功能