天涯论坛

 找回密码
 立即注册
搜索
查看: 77|回复: 3

【蓝因子教育】Python:MOOC学校名单|关键词提取和查询

[复制链接]

3049

主题

119

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99159054
发表于 2024-8-18 12:31:47 | 显示全部楼层 |阅读模式

1、题目

附件文件data.txt是教育部爱课程网中国大学 MOOC 平台的某个 HTML 页面源文件,里面包括了我国参与 MOOC 建设的一批大学或公司列表。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

问题1:请编写程序,从 data.txt 中提取大学或公司叫作列表,将结果写入文件univ.txt,每行一个大学或公司叫作根据大学或公司 在data.txt 显现的先后次序输出,样例如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

南京理工大学

南京师范大学

...‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬

提示:所有大学名叫作在 data.txt 文件中以 alt="南京理工大学" 形式存在。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

问题2:请编写程序,从 univ.txt 文件中提取大学名叫作,大学名叫作显现“大学”或“学院”字样为参考,但不包含“大学生”等字样,将所有大学名叫作在屏幕上输出,大学各行之间空行,最后给出名叫作包括“大学”和“学院”的名叫作数量,同期包括“大学”和“学院”的名叫作以结尾的词做为其类型。样例如下(样例中数量不是真实结果,北京工商大学嘉华学院算作学院):‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

南京理工大学

长沙师范学院

包括大学的名叫作数量是10

包括学院的名叫作数量是12

2、第1处理办法

1. 官方解法

经过split的办法,先按照【alt=】来分割字符,再用引号来分割,前者切片取最后一个元素【-1】,后者取第二个元素【1】,即引号后面的内容,因此官方给出的代码如下所示。

fi = open("data.txt","r")

f = open("univ.txt","w")

for line in fi:

if "alt" in line:

dx = line.split("alt=")[-1].split(")[1]

f.write("{}\n".format(dx))

f.close()

fi.close()

2. 个人解法

题目中需求能够用用正则表达式来提取,这就要用到re.findall()来提取。这种好处是不消遍历每一行,直接读取内容提取就可,省时有效

import re

f = open("univ.txt", "w")

with open("data.txt","r",encoding="utf-8") as fi:

line = fi.read()

line = re.findall(alt="(.*大学)",line)

for i in line:

f.write(i+"\n")

f.close()

3、第二题解法

1. 官方的解法

官方解法中规中矩,用上了for循环,if判断,文本打开关闭,以及列表切换等等。

n = 0

m = 0

f = open("univ.txt", "r")

lines = f.readlines()

f.close()

for line in lines:

line = line.replace("\n","")

if 大学生 in line:

continue

elif 学院 in line and 大学 in line:

if line[-2:] == 学院:

m += 1

elif line[-2:] == 大学:

n += 1

print({}.format(line))

elif 学院 in line:

print({}.format(line))

m += 1

elif 大学 in line:

print({}.format(line))

n += 1

print("包括大学的名叫作数量是{}".format(n)) #输出大学计数

print("包括学院的名叫作数量是{}".format(m)) #输出学院计数

思虑了排除了大学生这个关键词,而后用列表切片的办法来判断文本的结尾用的是学院还是大学。

2. 个人的解法

个人解法中,尽可能用正则表达式来简化程序,用【$】限制以大学和学院结尾。用【re.findall()】来判断是不是包括某个关键词。

import re

m = 0

n = 0

fi = open("univ.txt", "r",encoding=utf-8)

for line in fi:

line = line.strip()

daxue = re.findall("大学$",line)

if len(daxue)!=0:

m+=1

print(line)

xueyuan = re.findall("学院$",line)

if xueyuan:

print(line)

n+= 1

print("包括大学的数量是{}".format(m))

print("包括学院的数量是{}".format(n))返回外链论坛:www.fok120.com,查看更加多

责任编辑:网友投稿





上一篇:Python:仅有你想不到的,无Python做不到的 | Python书单
下一篇:首次超越Java,Python做为第二大最受欢迎的编程语言
回复

使用道具 举报

0

主题

1万

回帖

1

积分

新手上路

Rank: 1

积分
1
发表于 2024-8-23 20:48:26 | 显示全部楼层
哈哈、笑死我了、太搞笑了吧等。
回复

使用道具 举报

2996

主题

3万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109194
发表于 2024-10-24 17:43:30 | 显示全部楼层
楼主的文章非常有意义,提升了我的知识水平。
回复

使用道具 举报

3070

主题

3万

回帖

9915万

积分

论坛元老

Rank: 8Rank: 8

积分
99158931
发表于 2024-11-6 02:56:47 | 显示全部楼层
你的话语真是温暖如春,让我心生感激。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|天涯论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-23 10:53 , Processed in 2.889707 second(s), 39 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.