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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。