基于批量OCR分析中传研究生录取名单

中国传媒大学一直是我向往的高校,但是众所周知中国传媒大学研究生录取是十分不透明的,复试参考资料、往年真题、报录比等等都不公开,官网的研究生录取名单是图片形式的,无法直接用网页搜索工具查找数据,但我们可以利用OCR技术提取里面的信息数据。41张图片一张一张OCR是不现实的,我们需要使用百度提供的api批量OCR,再进行正则匹配就能得到想要的数据了。

  1. 打开百度人工智能网站:百度智能云
    基于批量OCR分析中传研究生录取名单
  2. 领取免费调用额度
    基于批量OCR分析中传研究生录取名单
    因为录取名单是表格类型的,领取表格文字识别接口就行了,每月有500次
  3. 记录下百度调用api的信息

AppIDAPI KeySecret Key

点击管理应用-保存好这三个值,代码中要用

基于批量OCR分析中传研究生录取名单
  1. 在Python中安装库:baidu-aip
    这个库anaconda里没有,需要用 pip install baidu-aip
  2. 将图片批量重命名
    用图片下载器下载好官网:中传研招网 的图片后,批量重命名,能加序号后缀,方便编程
  3. 用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)

基于批量OCR分析中传研究生录取名单
基于批量OCR分析中传研究生录取名单
因为图片中央有中传的大LOGO,所以中间部分数据识别会不准,这很正常, 但不必找原图修改,因为考生编号仍然还是完整的,大部分数据不会被筛选到,一个个修改会很浪费时间,完善方法见下。
  1. 用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结合使用很常见。最后,一定程度上防止某些考研机构做一些抄袭等不良商业行为 。

基于批量OCR分析中传研究生录取名单
  1. 最后回到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是学院号,但是具体是哪个学院并不知道,而且从往年数据分析,这个学院号每年都会变化的,所以还是适合等今年录取名单公布了再根据自己的编号来比对

  • 最后,其实还有一些详细的数据分析还没做,等我先准备复试考上了再说,如果没考上的话,那这篇文章就到这里了

Original: https://blog.csdn.net/qq_45702601/article/details/123482036
Author: 清洄KAKA
Title: 基于批量OCR分析中传研究生录取名单

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/600033/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球