笔者最近在备考关于100天后专升本考试,对于现在疫情影响,辅导班也开了对应的网课,笔者从辅导班回家的时候一本书都没有拿,后来老师在群里发了纸质书的pdf版本,让我们背单词,在学习单词的时候不会读音要一个一个去有道云等等相关软件翻译找到读音是一件比较麻烦和浪费时间的事情,便有了此文 我整个写完代码时间大概用了4个小时左右 共计150多行的python代码
思路为:PDF->PNG->txt->xml
将老师发来的pdf版本转换为图片,再用识图解析成txt文本,再用正则表达式提取单词到txt中,最后再解析成可被有道云识别的xml生词本格式。
1.pdf Convert to png
依赖库:pip install pymupdf
import sys, fitz
import os
import datetime
def pdf_convert_png(pdfPath, imagePath):
startTime_pdf2img = datetime.datetime.now()#开始时间
print("imagePath="+imagePath)
pdfDoc = fitz.open(pdfPath)
for pg in range(pdfDoc.pageCount):
page = pdfDoc[pg]
rotate = int(0)
# 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
# 此处若是不做设置,默认图片大小为:792X612, dpi=96
zoom_x = 1.33333333 #(1.33333333-->1056x816) (2-->1584x1224)
zoom_y = 1.33333333
mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
pix = page.getPixmap(matrix=mat, alpha=False)
if not os.path.exists(imagePath):#判断存放图片的文件夹是否存在
os.makedirs(imagePath) # 若图片文件夹不存在就创建
pix.writePNG(imagePath+'/'+'images_%s.png' % pg)#将图片写入指定的文件夹内
endTime_pdf2img = datetime.datetime.now()#结束时间
print('pdf2img时间=',(endTime_pdf2img - startTime_pdf2img).seconds)
读取所在目录下所有类型是pdf的文件返回一个包含所有pdf路径的list
def reload_pdf_path(pdfPath):
pdf_files = []; #存储将要转换pdf的名称
for filename in os.listdir(pdfPath):
if filename.endswith('pdf'):
pdf_files.append(filename);
return pdf_files;
转换结果:
我擦9-16pdf在末尾了,这可不行 倒时候要按组排序整进去呢 用了List.sort方法也不行 艹
用正则排序:
pdf_files = sorted(pdf_files,key = lambda i:int(re.match(r'(\d+)',i).group()))
print(pdf_files);
效果:
呵呵 我真是个带天才
转换了一共12篇pdf
可还行一个没有漏
简单封装下代码留着一会用
2.图文识别【OCR识别】
简单看了下其他博主写的图文识别,觉得效果都不太好,像我这种图片那么复杂的估计会很难识别