中国传媒大学一直是我向往的高校,但是众所周知中国传媒大学研究生录取是十分不透明的,复试参考资料、往年真题、报录比等等都不公开,官网的研究生录取名单是图片形式的,无法直接用网页搜索工具查找数据,但我们可以利用OCR技术提取里面的信息数据。41张图片一张一张OCR是不现实的,我们需要使用百度提供的api批量OCR,再进行正则匹配就能得到想要的数据了。
- 打开百度人工智能网站:百度智能云
登陆之后创建项目,项目信息随便填 - 领取免费调用额度
因为录取名单是表格类型,所以只需获取表格文本识别界面,每月500次。[En]
Because the admission list is a form type, just get the form text recognition interface, which is 500 times a month.
- 记录下百度调用api的信息
AppIDAPI KeySecret Key
点击管理应用-保存好这三个值,代码中要用
- 在Python中安装库:baidu-aip
这个库anaconda里没有,需要用pip install baidu-aip
- 将图片批量重命名
用图片下载器下载好官网:中传研招网 的图片后,批量重命名,能加序号后缀,方便编程 - 用Python批量OCR识别表格,并导出为Excel
from aip import AipOcr
import time
import urllib.request
APP_ID = "xxx"
API_Key = "xxx"
Secret_Key = "xxx"
aipOcr = AipOcr(APP_ID, API_Key, Secret_Key)
filePath = r"D:\360极速浏览器下载\拟录取名单"
for i in range(1, 42):
filePath1 = filePath + "\\yan (" + str(i) +").png"
image = open(filePath1, "rb").read()
table = aipOcr.tableRecognitionAsync(image)
request_id = table['result'][0]['request_id']
result = aipOcr.getTableRecognitionResult(request_id)
while result['result']['ret_msg'] != '已完成':
time.sleep(4)
result = aipOcr.getTableRecognitionResult(request_id)
download_url = result['result']['result_data']
xls_name = filePath1.split(".")[0] + ".xls"
urllib.request.urlretrieve(download_url,xls_name)
这里导出Excel最好是使用urllib库,不要直接使用requests库,格式可能会不兼容。运行完会得到每张图片所对应的表格
OCR表格大概长这样:
因为图片中央有中传的大LOGO,所以中间部分数据识别会不准,这很正常, 但不必找原图修改,因为考生编号仍然还是完整的,大部分数据不会被筛选到,一个个修改会很浪费时间,完善方法见下。
- 用R语言合并数据,导出到Excel
library(readxl)
setwd('D:/360极速浏览器下载/拟录取名单/')
filenames dir()
filenames2 grep('.xls', filenames, value = TRUE)
data3 data.frame()
for (i in filenames2){
path paste0('D:/360极速浏览器下载/拟录取名单/',i)
data2 read_xls(path = path,sheet='body',skip=1,col_names = TRUE)
data2$index i
data3 rbind(data3,data2)
}
write.csv(data3, file="D:/录取名单.csv",row.names = FALSE)
这里我新增了一列index,用来指明数据来自哪一张图片,方便当我们最终筛选的数据有问题时再检查图片。
关于为什么要突然换到R语言处理,这是因为R语言做数据预处理比python更方便,另外OCR的结果可能会导致表格出现错位等,合并时会报错列数不匹配,用R语言可以设置断点方便查找哪一个表格有问题。其次作为一名数据分析师用R语言和python结合使用很常见。最后,一定程度上防止某些考研机构做一些抄袭等不良商业行为 。
得到的录取总名单如下:
- 最后回到python,用正则匹配获取数据并导出
import re
import pandas as pd
with open(r'D:\录取名单.csv', encoding="gbk") as file:
data = pd.read_csv(file)
pat = "^10033[0-9]{4}07"
c=data['考生编号'].astype(str).apply(lambda x:re.match(pat,x))
d=data.loc[c.notnull(),:]
d.to_csv(r'D:\学院录取名单.csv', index=False, encoding="gbk")
10033是中传编号,07是学院号,但是具体是哪个学院并不知道,而且从往年数据分析,这个学院号每年都会变化的,所以还是适合等今年录取名单公布了再根据自己的编号来比对
- 最后,仍有一些详细的数据分析尚未完成。等我准备好复试再说。如果我考试不及格,那么这篇文章就到此为止。
[En]
finally, there are still some detailed data analysis that hasn't been done yet. Wait until I'm ready for the reexamination. If I don't pass the exam, then this article ends here.*
Original: https://blog.csdn.net/qq_45702601/article/details/123482036
Author: 清洄KAKA
Title: 基于批量OCR分析中传研究生录取名单

【无标题】

tensorflow2.4实现XBNBlock——batch-free normalization在ResNet50、MobileNet v2中的使用,解决BN的局限

Tensorflow (5) Word2Vec

EfficientNet系列(1): EfficientNetV2网络详解

StableDiffusion是否使用了梯度下降算法

语音处理/语音识别基础(一)- 声音到底为何可以存储和播放?

【足式机器人控制算法】(5.1)分解式虚拟模型VMC解耦思想 +反馈控制的方法规划反作用力 +运动学雅可比+虚功原理规划关节扭矩方法

Bert实战:使用Bert实现文本分类。

rsync安装使用教程

networkx 创建无向图_使用networkx及matplotlib库实现社会网络分析及可视化

小知识:安装系统后唯独搜不到自己的Wi-Fi

AttributeError: module ‘tensorflow._api.v1.compat‘ has no attribute ‘v1‘

科大讯飞麦克风阵列回声消除须知 V1.0

pop!_OS换国内源
