返回顶部
首页 > 资讯 > 后端开发 > Python >Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享
  • 129
分享到

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

Pythoncsv脚本 2023-05-17 19:05:04 129人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一、前言 二、需求描述 三、开始动手动脑 3.1 安装相关第三方包 3.2 导入需要用到的第三方库 3.3 读取pdf文件,并识别内容 3.4 对识别的数据进行处理,写入csv文件 总结 1. 前言扫描件一直受大众青睐,任何纸质资料在扫描

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

一、前言

二、需求描述

三、开始动手动脑

3.1 安装相关第三方包

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

3.3 读取pdf文件,并识别内容

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

总结

1. 前言

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

那要是想要引用其中的内容怎么办呢?别担心,python帮你解决问题。

2. 需求描述

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

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

pdfexample

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

csvexample

3. 开始动手动脑

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

3.1 安装相关第三方包

pip3 install pdf2image pytesseract

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

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

3.3 读取pdf文件,并识别内容

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'exampledata.txt' 'a', encoding='utf-8') as f: #写入txt文件
 f.write(text)

运行结果

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

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

image-20211215212147760

运行问题

“ 问题抛出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文件,第一列是英文名,第二列是中文名,第三列是所在国家

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

image-20211215204846623

Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

image-20211215204941725

总结

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

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

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

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

以上就是Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: Python 实现 PD 文字识别、提取并写入 CSV 文件脚本分享

本文链接: https://lsjlt.com/news/211426.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作