外链论坛

 找回密码
 立即注册
搜索
查看: 83|回复: 2

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

[复制链接]

2642

主题

183

回帖

9916万

积分

论坛元老

Rank: 8Rank: 8

积分
99160594
发表于 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,查看更加多

责任编辑:网友投稿

回复

使用道具 举报

0

主题

2万

回帖

1

积分

新手上路

Rank: 1

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

使用道具 举报

13

主题

1404

回帖

6

积分

新手上路

Rank: 1

积分
6
发表于 3 天前 | 显示全部楼层
你的见解真是独到,让我受益匪浅。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-9-17 06:09 , Processed in 0.072000 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.