前言

扫描件一直受大众青睐,任何纸质资料在扫描之后进行存档,想使用时手机就能打开,省心省力。但是扫描件的优点也恰恰造成了它的一个缺点,因为是通过电子设备扫描,所以出来的是图像,如果想要处理文件上的内容,直接操作是无法实现的。那要是想要引用其中的内容怎么办呢?别担心,Python帮你解决问题。

目录

前言

需求描述

分析

代码

tess_ocr(pdf_path, lang,first_page,last_page)

writercsv(intxt,outcsv)

compare_file(file1,file2,file3)

总结


需求描述

现有一份pdf扫描件,我们想把其中的文字提取出来并且分三列写入csv文档,内容及效果如下:

分析

pdf扫描件是文档扫描成电脑图片格式后转化成pdf,提取其中的文字就相当于识别图片内的文字。所以,我们的工作就是将pdf转成图片,再用ocr工具提取图片中的文字。

代码

首先导入需要用到的第三方库

import os//处理文件
​
from pdf2image import convert_from_path  //pdf转图片
​
import pytesseract//识别图片文字
​
import csv  //处理csv文件

tess_ocr(pdf_path, lang,first_page,last_page)

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

pdf_path: pdf文件的存储路径

image: 代表PDF文档每页的PIL图像列表

first_page :允许设置由pdftoppm处理的第一个页面;

last_page:允许设置最后一页由pdftoppm处理

fmt:允许指定输出格式。目前支持的格式是jpg、png和ppm;

output_folder:图片保存路径

def tess_ocr(pdf_path, lang,first_page,last_page):
​# 创建一个和pdf同名的文件夹images = convert_from_path(pdf_path, fmt='png',first_page=first_page,last_page=last_page,output_folder=imagefolder,userpw='site')  # 转成图片
​text = ''
​for img in images:   text += pytesseract.image_to_string(img, lang=lang) # 识别图片文字  with open(r'C:\Users\31678\Desktop\example\data.txt' 'a', encoding='utf-8') as f: #写入txt文件f.write(text)   
        

运行结果

生成一个同名的文件夹存放拆分的图片,接着提取图片文字写入data.txt

运行问题

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

解决措施:下载 poppler。

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

方法二:参数指定绝对路径:images = convert_from_path(pdf_path=pdf_file_path, poppler_path=r'poppler中bin文件所在地址')

问题抛出:pytesseract.pytesseract.TesseractNotFoundError: tesseract is not installed or it's not in your PATH. See README file for

more information.

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

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('[',' ')      #根据识别情况对数据进行清洗 outfp.writelines(li)
​infp.close()
​outfp.close()      
         

运行结果

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

writercsv(intxt,outcsv)

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

intxt:文本文件地址

outcsv:新生成的csv文件

def writercsv(intxt,outcsv):
​csvFile = open(outcsv,'a',newline='',encoding='utf-8') # 使用newlines=''可保证存储的数据不空行。
​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文件,第一列是英文名,第二列是中文名,第三列是所在国家

compare_file(file1,file2,file3)

提取出的csv与原csv进行对比,将内容错误的行写入file3,同时附赠错误提示

file1:提取出的csv

file2:原csv

file3:有误内容

def compare_file(file1,file2,file3):
​#定义空列表来存放两个文件的对应行engname1,engname2,country1,country2,chiname1,chiname2
​#字符串存放对比会出现的错误情况engnameerror,countryerror,chinameeeror
​#open打开提取的文件 别名f1,f2
​#readlines()读取文件中的每一行 存放在fileone,filetwo
​#将fileone中的每一列分离出来,添加进列表中
​for row in fileone:
​engname1.append(row.split(',')[0])   try:country1.append(row.split(',')[1])chiname1.append(row.split(',')[2])except IndexError :    #可能会出现索引越界country1.append(' ') chiname1.append(' ')
​#同理将filetwo中的每一列分离出来,添加进列表中#打开file3#循环第一列的单元格for cell in engname1:  #比较文件中的第一列,若fileone中的第一列中的元素不在filetwo的第一列的对应行中,将这一行写进file3中if cell not in engname2:      csvrow=fileone[engname1.index(cell)]+engnameerrorwriter.writerow(csvrow.split(','))
​#若第一列在,则比较第二列,若fileone中的第二列中的元素不在filetwo的第二列对应行中,将这一行写进file3中
​#若第一列,第二列都对应,则比较第三列,若fileone中的第三列中的元素不在filetwo的第三列对应行中,将这一行写进file3中
​#关闭文件

运行结果

有误的行写入different.csv,同时在行尾显示错误信息

运行问题

问题抛出:UnicodeDecodeError: 'utf8' codec can't decode byte 0xa4 in position

解决措施:先将文件另存为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自动化:提取扫描件中的文字相关推荐

  1. vscode中打开pdf文件_提取pdf文件中的文字

    环境说明 windows10系统 python3.6版本 安装 网上很多说需要安装pdfminer3k和pdfminer3k.six,我尝试了先安装pdfminer3k后安装pdfminer3k.si ...

  2. Python办公自动化——提取pdf文件中表格并到Excel

    Python办公自动化--提取pdf文件中表格合并到Excel 需求描述 现有一 pdf 文件内容如下,文件中内容主要是表格形式的获奖名单,共158页.现要读取这些表格信息并保存到 excel 文件中 ...

  3. C#提取HTML代码中的文字(转)

    C#提取HTML代码中的文字 /// <summary>   /// 去除HTML标记   /// </summary>   /// <param name=" ...

  4. python - bs4提取XML/HTML中某个标签下的属性

    python - bs4提取XML/HTML中某个标签下的属性 一个例子就让你看明白.看完记得给博主点个赞噢. 我们要提取的xml原始文档来自以下网址: https://raw.githubuserc ...

  5. 什么软件可以提取扫描文件上的文字

    在工作上会遇到一些不能复制.粘贴文件资料,平常就只能进行简单的截图然后手动提取图片中的文字了,这样操作下来是非常耽误时间的,大家要想快速的解决这个问题,我们必须要借助工具的帮助才行,那么什么软件可以提 ...

  6. Python工具源码,Python批量提取PPT文件中的图片

    在办公场景当中,同样也有这样一个需求,那就是快速批量把PPT文件中的图片提取出来,毕竟一个个点击另存为太过于繁琐,以及耗费时间,前面本渣渣分享过如何应用Python批量提取PDF文件中的图片,而这一篇 ...

  7. 举个栗子~Tableau 技巧(241):用 Python 脚本提取文本内容中的关键词

    经常有数据粉反馈:在处理文本内容的时候,是否有快速提取内容关键词的方法呢? 方法有的,可以试试 Python.这里,我们来分享:如何在 Tableau 中利用 Python 脚本从文本内容提取关键词. ...

  8. pdf exe如何提取pdf文件_python应用:如何用python提取pdf文件中的文字

    从pdf中提取文字,相信很多人都干过这事,怎么在python中实现呢,今天带大家看看. 第一步导入库 import PyPDF2 第二步导入pdf文件 pdf_file =open('dataset/ ...

  9. 如何快速提取PDF文件中的文字?

    很多人想要把PDF里的文字提取出来,却大费周章走了弯路,到处搜索"免费PDF转Word",其实单纯提取文字福昕阅读器就能实现. 操作方法 首先使用福昕阅读器打开PDF文件,点击[视 ...

最新文章

  1. [codeforces] 527A Playing with Paper
  2. Java黑皮书课后题第10章:***10.8(金融:Tax类)编程练习题8.12使用数组编写一个计算税款的程序。设计一个名为Tax类,该类包含下面的实例数据域
  3. php ziparchive自带吗,PHP自带的ZipArchive压缩文件并下载打包好的文件(重要)
  4. Rhel7 设置目录权限,acl权限
  5. 苹果公布AirPods Pro维修费用:705元买一只,789买充电盒
  6. UVA12541 LA6148 Birthdates【最值】
  7. css3 之弹性布局
  8. 使用FMEA来分析系统的可用性
  9. 计算机毕设中期检查表怎么写,[毕业论文中期检查表(精选多篇)] 毕业论文中期检查表怎么写...
  10. 手机全屏html幻灯片,Jquery+css3,实现全屏撕裂幻灯片案例教程(zepto版本的 jquery.slitslider.js)【手机版】...
  11. 八、管道弯头中流体混合流动与传热
  12. 英文论文发表必备干货!SCI投稿7个阶段经典邮件模板,请拿走
  13. JAVA常用加密解密算法Encryption and decryption
  14. 为什么公司要用企业邮箱
  15. Mac新手操作指南(三)
  16. 搞死SAP系统系列 让系统无法登录
  17. API是什么?(读完你就明白)
  18. 一篇文章完全弄懂Logistic回归(含极大似然估计详细推导和实现代码)
  19. 网页设计师常去的综合类网站总结-卢松松博客
  20. iOS设置icon图标和启动页的详细设置

热门文章

  1. python英文文本词频统计_python实现简单的英文词频统计
  2. 数学知识—不同数据范围求组合数,例题、思路、代码实现
  3. 笔记:3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)
  4. 俄分析中国SH-1火炮性能:兼容各型北约弹药
  5. 小技巧: 掀开 Metacity 的同化殊效
  6. Cris 的 Go 笔记(上)
  7. python画矩阵图_Python可视化25_seaborn绘制矩阵图
  8. 自动控制 matlab仿真,基于MATLAB自动控制系统仿真.doc
  9. linux系统添加打印机失败,怎么在Linux 系统下安装打印机的驱动 - 驱动管家
  10. 【java初学】函数式接口和Stream