文章目录
想把 pdf 中的文字提取出来的思路是:
先将 pdf 的每一张都转成图片,然后使用 ocr 技术识别出图片中的文字。
pdf 转图片
核心第三方库是 pdf2image 。
具体怎么操作直接看 python 代码就好了。
"""
批量将pdf文件转换成图片jpeg格式
"""
from pdf2image import convert_from_path
import os
import shutil
from tqdm import tqdm
import json
def pdfToJpeg(dirpath, outputpath):
for root, dirs, files in os.walk(dirpath):
for file in tqdm(files):
file_path = os.path.join(root, file)
pages = convert_from_path(file_path, dpi=200)
articleID = file[:-4]
saveDir = outputpath + '\\' + str(articleID)
if os.path.exists(saveDir):
shutil.rmtree(saveDir) # 如果存在则删除
os.makedirs(saveDir)
for i, page in enumerate(pages):
page.save(saveDir + '\\' + f'out{i}.jpg')
def main():
dirpath = r'E:\fw\ISISPDF330\currentPDFbendi'
outPath = r'E:\fw\JPEG\bendi'
pdfToJpeg(dirpath, outPath)
if __name__ == '__main__':
main()
使用 ocr 识别文字
核心第三方库是 paddleocr 。
from pdftojpeg import pdfToJpeg
from paddleocr import PaddleOCR
import os
def write_to_txt(lines):
pass
def main():
PDFAddress = "pdf"
JPEGAdress = "jpeg"
pdfToJpeg(PDFAddress, JPEGAdress) # 调用 pdf 转 图片
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
for root, dirs, files in os.walk(JPEGAdress):
files.sort(key=lambda x: eval(x[3:-4])) # 排序是为了在读取JPG文件时按照指定顺序读取。
for file in files:
img_path = os.path.join(root, file)
result = ocr.ocr(img_path, cls=True)
lines = []
for line in result:
lines.append(line[-1][0])
print(lines)
print('\n')
if __name__ == '__main__':
main()
过一段时间之后 paddlepaddle 的函数使用方法可能会变,这个时候去百度飞浆的官网查一下就好了。