Python实现PDF文字识别提取并写入CSV文件

目录
  • 1.前言
  • 2.需求描述
  • 3.开始动手动脑
    • 3.1安装相关第三方包
    • 3.2导入需要用到的第三方库
    • 3.3读取pdf文件,并识别内容
    • 3.4对识别的数据进行处理,写入csv文件
  • 总结

1. 前言

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

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

2. 需求描述

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

pdfexample

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

运行结果

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

运行问题

问题抛出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文字识别提取的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python批量提取PDF文件中文本的脚本

    本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import os import sys import time pdfs = (pdfs for pdfs in os.listdir('.') if pdfs.endswith('.pdf')) for pdf1 in pdfs: pdf = pdf1.replace(' ', '_').replace('-

  • 基于Python实现对PDF文件的OCR识别

    最近在做一个项目的时候,需要将PDF文件作为输入,从中输出文本,然后将文本存入数据库中.为此,我找寻了很久的解决方案,最终才确定使用tesseract.所以不要浪费时间了,我们开始吧. 1.安装tesseract 在不同的系统中安装tesseract非常容易.为了简便,我们以Ubuntu为例. 在Ubuntu中你仅仅需要运行以下命令: 这将会安装支持3种不同语言的tesseract. 2.安装PyOCR 现在我们还需要安装tesseract的Python接口.幸运的是,有许多出色的Python接

  • Python提取PDF指定内容并生成新文件

    在之前的Python办公自动化案专题中,我们已经介绍了如何有选择的提取某些页面进行合并. 但是很多时候,我们并不会预知希望提取的页号,而是希望将包含指定内容的页面提取合并为新PDF,本文就以两个真实需求为例进行讲解. 01需求描述 数据是一份有286页的上市公司公开年报PDF,大致如下 现在需要利用 Python 完成以下两个需求 " 需求一:提取所有包含 战略 二字的页面并合并新PDF 需求二:提取所有包含图片的页面,并分别保存为 PDF 文件 " 02前置知识和逻辑梳理 2.1 P

  • 基于Python实现PDF区域文本提取工具

    目录 功能简介 开发代码 功能简介 打开软件后界面如下: 点击打开文件按钮打开之前的PDF文件后效果如下: 框选区域后,标题栏会自动显示当前框选的区域提取到的文字,还可以左右按钮切换: 实际我们需要提取文字的区域可能不止这一个,所以程序支持多区域框选: 完成区域框选后就可以点击保存文件,将PDF每页提取到的文本保存到一个csv文件中,当前选区的保存结果如下: 可以看到已经按框选顺序依次保存了每一个区域的字符串. 如果选择区域时发现提取结果不准确,可以撤销后重新选择: 保存图片则会将PDF的每页的

  • 如何使用Python进行PDF图片识别OCR

    使用场景 使用图片识别可以快速提取图片中的信息,方便高效. Python并不能直接对PDF进行识别,所以如果是识别PDF的话,需要先将PDF转化为图片,然后再进行识别. 必备工具 Python 可以安装3.7及以上版本 tesseract-ocr 下载地址: https://github.com/UB-Mannheim/tesseract/wiki 使用最新版本即可 需要用到的库 pip install pillow pip install opencv-python pip install f

  • Python常见读写文件操作实例总结【文本、json、csv、pdf等】

    本文实例讲述了Python常见读写文件操作.分享给大家供大家参考,具体如下: 读写文件 读写文件是最常见的IO操作,python内置了读写文件的函数,用法和c是兼容的. 读写文件前,我们必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以读写文件就是请求操作系统打开一个文件对象(文件描述),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件). 1.读文件 要以读文件的模式打开一个文件对象,使用p

  • Python实现PDF文字识别提取并写入CSV文件

    目录 1.前言 2.需求描述 3.开始动手动脑 3.1安装相关第三方包 3.2导入需要用到的第三方库 3.3读取pdf文件,并识别内容 3.4对识别的数据进行处理,写入csv文件 总结 1. 前言 扫描件一直受大众青睐,任何纸质资料在扫描之后进行存档,想使用时手机就能打开,省心省力.但是扫描件的优点也恰恰造成了它的一个缺点,因为是通过电子设备扫描,所以出来的是图像,如果想要处理文件上的内容,直接操作是无法实现的. 那要是想要引用其中的内容怎么办呢?别担心,Python帮你解决问题. 2. 需求描

  • 基于Python实现图像文字识别OCR工具

    目录 引言 功能列表 OCR部分 界面部分 软件代码 参考链接 引言 最近在技术交流群里聊到一个关于图像文字识别的需求,在工作.生活中常常会用到,比如票据.漫画.扫描件.照片的文本提取. 博主基于 PyQt + PaddleOCR 写了一个桌面端的OCR工具,用于快速实现图片中文本区域自动检测+文本自动识别. 识别效果如下图所示: 所有框选区域为OCR算法自动检测,右侧列表有每个框对应的文字内容: 点击右侧"识别结果"中的文本记录,然后点击"复制到剪贴板"即可复制该

  • 十行Python代码实现文字识别功能

    目录 1.环境和配置要求 百度接口 2.具体实现步骤 获取截图 调用Baidu aip识别并打印文字 调用打包程序生成专属识别文字小程序 今天给大家分享的主题是用百度的接口实现图片的文字识别. 1.环境和配置要求 整体是用Python实现,所需要使用的第三方库包括aip.PIL.keyboard.pyinstaller,如未安装,可在CMD中使用pip install Baidu-AIP/pillow/keyboard/pyinstaller指令安装. 百度接口 打开网址,如未注册请先注册,然后

  • Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

    先举个例子,分别以不指定编码.指定编码为 utf-8.指定编码为 utf-8-sig 三种方式来做比较,再将写入 csv 文件和 txt 文件来做个对比 一.不指定编码方式,直接存入 csv 文件 import csv with open('test.csv', 'w') as fp: writer = csv.writer(fp) writer.writerow(['汉语', '俄语', '韩语', '日语', '英语']) writer.writerow(['爱你', 'люблю тебя

  • python pandas 解析(读取、写入)CSV 文件的操作方法

    目录 1. 使用 pandas 读取 CSV 文件 2. 使用 pandas 写入 CSV 文件 1. 使用 pandas 读取 CSV 文件 原始数据包含了公司员工的数据: Name Hire Date Salary Sick Days remaining Graham Chapman 03/15/14 50000.00 10 John Cleese 06/01/15 65000.00 8 Eric Idle 05/12/14 45000.00 10 Terry Jones 11/01/13

  • Python写入CSV文件的方法

    本文实例讲述了Python写入CSV文件的方法.分享给大家供大家参考.具体如下: # _*_ coding:utf-8 _*_ #xiaohei.python.seo.call.me:) #win+python2.7.x import csv csvfile = file('csvtest.csv', 'wb') writer = csv.writer(csvfile) writer.writerow(['id', 'url', 'keywords']) data = [ ('1', 'http

  • Python实现读取及写入csv文件的方法示例

    本文实例讲述了Python实现读取及写入csv文件的方法.分享给大家供大家参考,具体如下: 新建csvData.csv文件,数据如下: 具体代码如下: # coding:utf-8 import csv # 读取csv文件方式1 csvFile = open("csvData.csv", "r") reader = csv.reader(csvFile) # 返回的是迭代类型 data = [] for item in reader: print(item) dat

  • python中将正则过滤的内容输出写入到文件中的实例

    处理过滤Apache日志文件 access_test.log文件内容 27.19.74.143 - - [30/May/2015:17:38:21 +0800] "GET /static/image/smiley/default/sleepy.gif HTTP/1.1" 200 2375 8.35.201.164 - - [30/May/2015:17:38:21 +0800] "GET /static/image/common/pn.png HTTP/1.1" 2

随机推荐