python读取并识别pdf内容,python 写入pdf

  python读取并识别pdf内容,python 写入pdf

  本文主要是给大家分享一个Python可以识别提取PDF字符并写入CSV文件的脚本。文中的样例代码讲解的很详细,感兴趣的朋友可以看看。

  00-1010 1.前言2。需求描述。开始动手动脑3.1安装相关第三方包3.2导入你需要的第三方库3.3读取pdf文件并识别内容3.4处理识别出的数据并写入csv文件进行汇总。

  

目录

  扫描一直受到大众的青睐。任何纸质资料扫描后存档,想用的时候手机就能开机,省心省力。然而,扫描文档的优点也导致了它的缺点。因为是电子设备扫描出来的,图像就出来了。如果要处理文档的内容,直接操作是不可能的。

  如果要引用内容呢?别担心,Python会帮你解决问题。

  

1. 前言

  有一个扫描的pdf。我们希望从中提取文本,并以三列的形式将其写入csv文档。内容和效果如下:

  pdf示例

  csvexample

  

2. 需求描述

  扫描的pdf文档经过扫描后转换成计算机图片格式,提取其中的文字相当于识别图片中的文字。所以我们的工作就是把pdf变成图片,然后用ocr工具把图片中的文字提取出来。

  

3. 开始动手动脑

  pip3安装pdf2image pytesseract

  

3.1 安装相关第三方包

  导入os #处理文件

  Pdf2image导入convert _ from _ path # pdf到图片

  Import pytesseract #识别图片文本。

  导入csv #处理csv文件

  

3.2 导入需要用到的第三方库

  tess_ocr(pdf_path,lang,第一页,最后一页)

  将pdf文件拆分成图片,提取文字写入文本文件。

  PDF _ path:PDF文件图像的存储路径:代表PDF文档每一页的PIL图像列表first_page:允许设置pdftoppm处理的第一页;Last_page:允许设置要由pdftoppm处理的最后一页fmt:允许指定输出格式。目前支持的格式有jpg、png、ppm;Output_folder:图像保存路径defess _ ocr(pdf _ path,lang,first _ page,last _ page) 3360

  #创建一个与pdf同名的文件夹

  images=convert _ from _ path(pdf _ path,fmt= png ,first _ page=first _ page,last _ page=last _ page,output _ folder=imagefolder,userpw= site) #转换为图片

  text=

  对于图像:中的img

  text=pytesserac t . image _ to _ string(img,lang=lang) #识别图像文本。

  用(r example \ data.txt a ,encoding= utf-8 )作为f: #写入txt文件。

  f.write(文本)

  运行结果

  生成一个同名的文件夹来存储拆分后的图片,然后提取图片文本写入data.txt

  运行问题

  /p>

  问题抛出1:

  pdf2image.exceptions.PDFInfoNotInstalledError: Unable to get page count. Is poppler installed and in PATH?

  解决措施:下载 poppler。

  >1 方法一:设置环境变量 poppler/bin;

  >2 方法二:

  参数指定绝对路径:

  images = convert_from_path(pdf_path=pdf_file_path, poppler_path=r'poppler中bin文件所在地址')

  问题抛出2:

  pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for more information.

  解决措施:额外下载安装tesseract-ocr并配置环境变量。

  

  

3.4 对识别的数据进行处理,写入csv文件

  modification(infile, outfile)

  清洗生成的文本文档

  

  • infile:需要进行处理的文件地址
  • outfile:处理后生成的新文件的地址

  

def modification(infile, outfile):

   infp = open(infile, "r",encoding=utf-8)

   outfp = open(outfile, "w",encoding=utf-8)

   lines = infp.readlines() #返回列表,包含所有的行。

   #依次读取每行

   for li in lines:

   if li.split(): #str.split(str="", num=string.count(str)),过滤文件中的空行

   # 根据识别情况对数据进行清洗

   li = li.replace([, ).replace(], )

   outfp.writelines(li)

   infp.close()

   outfp.close()

  

  运行结果

  生成一个新的txt文件,新文件删除了data.txt中的空行,将原文件中错误识别的内容替换成正确的。

  writercsv(intxt,outcsv)

  将文本文件按空格分列写入csv表格

  

  • intxt:文本文件地址
  • outcsv:新生成的csv文件

  

def writercsv(intxt,outcsv):

   # 使用newlines=可保证存储的数据不空行。

   csvFile = open(outcsv, a,newline=, encoding=utf-8)

   writer = csv.writer(csvFile)

   csvRow = []

   f = open(intxt,r,encoding=utf-8)

   for line in f:

   csvRow = line.split() #以空格为分隔符

   if len(csvRow)>1 and len(csvRow)<=3: #约束条件,视情况而定

   writer.writerow(csvRow)

   f.close()

   csvFile.close()

  运行结果

  生成一个三列csv文件,第一列是英文名,第二列是中文名,第三列是所在国家

  

  

  

  

总结

  通过本次学习实现了从扫描件中提取文字、把内容按要求写进不同格式的文档的需求。

  最初以为提取pdf的库也适用于扫描件,尝试了Pdfplumber库和PyPDF2库。

  实践发现Pdfplumber只能识别扫描件pdf中的水印,不适用于扫描件的pdf,而PyPDF2库运行报错:NotImplementedError: only algorithm code 1 and 2 are supported。

  原因是这个被加密的pdf可能是从高版本的acrobot中来的,所以对应的加密算法代号为‘4’,然而,现有的pypdf2模块并只支持加密算法代号为‘1’或者‘2’的pdf加密文件。

  以上就是Python实现PDF文字识别提取并写入CSV文件的详细内容,更多关于Python PDF文字识别提取的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • kotlon协程,深入理解kotlin协程pdf,一文彻底搞懂Kotlin中的协程
  • 深入解析C#(第4版),深入解析css pdf,深入解析contentWindow, contentDocument
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf,Java 反射机制原理与用法详解
  • ,,Java使用iTextPDF生成PDF文件的实现方法
  • ,,Python利用PyMuPDF实现PDF文件处理
  • 漫画算法小灰的算法之旅pdf,漫画算法2-小灰的算法进阶
  • devops和自动化运维实践 PDF,devops思想在运维方面的具体实践
  • pdf如何去除水印,pdf去水印的三种方法
  • 把a4的内容打印成a3小册子,a4的pdf文档如何打印成a3
  • nlp自然语言处理入门pdf,精通python自然语言处理 pdf
  • 容器docker基本操作,每天5分钟玩转docker容器技术 pdf
  • sklearn中文手册pdf下载,sklearn库模块及函数
  • 留言与评论(共有 条评论)
       
    验证码: