Python Textract库:文本提取

98b933fb6a59ab271502d5468b4ce4d6.png

更多Python学习内容:ipengtao.com

Textract是一个强大的Python库,用于从各种文件格式中提取文本。无论是PDF、Word文档、Excel电子表格、HTML页面还是图像,Textract都能有效地提取其中的文本内容。Textract通过集成多种开源工具和库,实现了对多种文件格式的支持,使得文本提取变得简单而高效。本文将详细介绍Textract库的安装、主要功能、基本操作、高级功能及其实践应用,并提供丰富的示例代码。

安装

Textract库可以通过pip进行安装。确保Python环境已激活,然后在终端或命令提示符中运行以下命令:

pip install textract

此外,Textract依赖于一些第三方软件,如Tesseract、pdftotext等,具体依赖项取决于你要处理的文件类型。

可以通过以下命令安装这些依赖项:

在Ubuntu上:

sudo apt-get install -y poppler-utils tesseract-ocr

在MacOS上:

brew install tesseract poppler

主要功能

  1. 多种文件格式支持:支持PDF、DOC、DOCX、PPT、PPTX、XLS、XLSX、HTML、TXT、图像等多种文件格式的文本提取。

  2. 自动检测文件类型:能够自动检测文件类型,无需手动指定。

  3. OCR支持:集成Tesseract OCR引擎,支持从图像中提取文本。

  4. 编码处理:自动处理文件的字符编码问题。

基本操作

从PDF文件中提取文本

以下示例展示了如何使用Textract从PDF文件中提取文本:

import textract# 从PDF文件中提取文本
text = textract.process('example.pdf')# 打印提取的文本
print(text.decode('utf-8'))

从Word文档中提取文本

以下示例展示了如何使用Textract从Word文档中提取文本:

import textract# 从Word文档中提取文本
text = textract.process('example.docx')# 打印提取的文本
print(text.decode('utf-8'))

从Excel电子表格中提取文本

以下示例展示了如何使用Textract从Excel电子表格中提取文本:

import textract# 从Excel电子表格中提取文本
text = textract.process('example.xlsx')# 打印提取的文本
print(text.decode('utf-8'))

从HTML页面中提取文本

以下示例展示了如何使用Textract从HTML页面中提取文本:

import textract# 从HTML页面中提取文本
text = textract.process('example.html')# 打印提取的文本
print(text.decode('utf-8'))

从图像中提取文本

以下示例展示了如何使用Textract从图像中提取文本:

import textract# 从图像中提取文本
text = textract.process('example.png')# 打印提取的文本
print(text.decode('utf-8'))

高级功能

自定义OCR引擎

Textract默认使用Tesseract作为OCR引擎。

以下示例展示了如何自定义OCR引擎的参数:

import textract# 使用自定义参数提取图像中的文本
text = textract.process('example.png', method='tesseract', language='eng')# 打印提取的文本
print(text.decode('utf-8'))

处理多页PDF

Textract能够处理多页PDF文件,并将所有页面的文本提取出来。

以下示例展示了如何处理多页PDF:

import textract# 从多页PDF文件中提取文本
text = textract.process('multipage_example.pdf')# 打印提取的文本
print(text.decode('utf-8'))

处理编码问题

Textract能够自动处理文件的字符编码问题,但有时需要手动指定编码。

以下示例展示了如何处理编码问题:

import textract# 从文件中提取文本,并指定编码
text = textract.process('example.txt', encoding='utf-8')# 打印提取的文本
print(text.decode('utf-8'))

处理扫描件PDF

对于扫描件PDF,Textract同样可以通过OCR技术提取文本。

以下示例展示了如何处理扫描件PDF:

import textract# 从扫描件PDF中提取文本
text = textract.process('scanned_example.pdf', method='tesseract', language='eng')# 打印提取的文本
print(text.decode('utf-8'))

实践应用

批量处理文件

以下示例展示了如何使用Textract批量处理多个文件,并将提取的文本保存到新的文本文件中:

import textract
import os# 定义输入和输出目录
input_dir = 'documents'
output_dir = 'extracted_texts'# 确保输出目录存在
os.makedirs(output_dir, exist_ok=True)# 获取输入目录中的所有文件
files = os.listdir(input_dir)# 批量处理文件
for file in files:input_file = os.path.join(input_dir, file)output_file = os.path.join(output_dir, os.path.splitext(file)[0] + '.txt')# 提取文本text = textract.process(input_file)# 保存提取的文本with open(output_file, 'w', encoding='utf-8') as f:f.write(text.decode('utf-8'))print("所有文件处理完成")

创建搜索引擎

以下示例展示了如何使用Textract提取文档中的文本,并创建一个简单的搜索引擎:

import textract
import os
from whoosh.index import create_in
from whoosh.fields import Schema, TEXT
from whoosh.qparser import QueryParser# 定义输入目录
input_dir = 'documents'# 定义Whoosh索引的Schema
schema = Schema(title=TEXT(stored=True), content=TEXT)# 创建索引目录
if not os.path.exists("indexdir"):os.mkdir("indexdir")# 创建索引
ix = create_in("indexdir", schema)# 获取输入目录中的所有文件
files = os.listdir(input_dir)# 提取文本并添加到索引
writer = ix.writer()
for file in files:input_file = os.path.join(input_dir, file)text = textract.process(input_file)writer.add_document(title=file, content=text.decode('utf-8'))
writer.commit()# 创建搜索功能
def search(query_str):with ix.searcher() as searcher:query = QueryParser("content", ix.schema).parse(query_str)results = searcher.search(query)for result in results:print(result['title'])# 测试搜索功能
search("your search query")

分析法律文档

以下示例展示了如何使用Textract提取法律文档中的文本,并进行基本的文本分析:

import textract
import nltk
from nltk.tokenize import word_tokenize
from nltk.probability import FreqDist# 下载必要的NLTK数据
nltk.download('punkt')# 提取文本
text = textract.process('legal_document.pdf')
text = text.decode('utf-8')# 分词
tokens = word_tokenize(text)# 计算词频
freq_dist = FreqDist(tokens)# 打印最常见的10个词
print(freq_dist.most_common(10))

总结

Textract库为Python开发者提供了一个功能强大且灵活的工具,用于从各种文件格式中提取文本。通过其简洁的API和丰富的功能,用户可以轻松进行PDF、Word、Excel、HTML、图像等文件的文本提取,并在各种应用场景中发挥作用。无论是批量处理文件、创建搜索引擎还是进行文本分析,Textract都能提供强大的支持和便利。本文详细介绍了Textract库的安装、主要功能、基本操作、高级功能及其实践应用,并提供了丰富的示例代码。希望在实际项目中能够充分利用Textract库,提高文本提取和处理的效率和准确性。

如果你觉得文章还不错,请大家 点赞、分享、留言 ,因为这将是我持续输出更多优质文章的最强动力!

更多Python学习内容:ipengtao.com


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

5783a4cdce7a4312cd46f13bdb5e71f7.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

f72fb7b1f7e6ba403dd17a7b516cf6d5.jpeg

往期推荐

Python 中的 iter() 函数:迭代器的生成工具

Python 中的 isinstance() 函数:类型检查的利器

Python 中的 sorted() 函数:排序的利器

Python 中的 hash() 函数:哈希值的奥秘

Python 中的 slice() 函数:切片的利器

Python 的 tuple() 函数:创建不可变序列

点击下方“阅读原文”查看更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/30646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

opencascade AIS_InteractiveContext源码学习1 object display management 对象显示管理

AIS_InteractiveContext 前言 交互上下文(Interactive Context)允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是,对于已经被交互上下文识别的交互对象,必须使用上下文方法进行…

centOS Stream9配置NAT8网络

首先将VMware关机,添加网络适配器 启动虚拟机,查看ens192是否打开连接 安装的图形化需要查看右上角电源处网卡是否连接 最小化安装一般不会出现未连接的状态 使用ip a 查看 配置网卡文件 cd /etc/NetworkManager/system-connections/cd到当前目录下…

7-Zip

最牛掰的解压缩的开源软件!赏!!!! 概述 7-Zip 是一款免费开源的文件归档和压缩软件,由于其高压缩比和支持多种格式等优势,越来越受到用户的青睐。7-Zip 最初由一位俄罗斯程序员开发&#xff0c…

在 Visual Studio 2022 (Visual C++ 17) 中使用 Visual Leak Detector

在 Visual C 2022 中使用 Visual Leak Detector 1 问题描述1.1 内存泄漏的困扰和解决之道1.2 内存泄漏检测工具的选择1.3 VLD的现状 2 安装和设置VLD的环境变量2.1 安装VLD文件2.2 VLD安装后的目录和文件说明2.2.1 include子目录说明2.2.2 lib子目录说明2.2.2.1 目录整理 2.2.3…

uniapp app一键登录

一键登录不需要单独写页面,uniapp 有原生的页面 第一步,登录Dcloud后台》我的应用》点击应用名称 填写完点击 uniCloud模块新建一个服务空间》选择免费 , 创建完点击一键登录,添加应用,这个需要审核,“大概一天左右”…

ORM框架SQLAlchemy

ORM框架SQLAlchemy 目录 ORM框架SQLAlchemy介绍安装架构连接数据库1. PostgreSQL2. MySQL3. Oracle4. Microsoft SQL Server5. SQLite 创建连接池原生Python操作数据库SQLAlchemy的ORM操作创建表外键字段的创建一对多多对多 ORM操作增删改查查询添加删除修改 介绍 sqlalchemy是…

帝国CMS二次开发H5手游如何让同一个url 不同的模板

帝国CMS在二次开发《72游戏网》的时候,H5手游如何让同一个url 不同的模板 比如:www.72yy.com/you/11935.html 是H5游戏宣传页 由于很多H5游戏和网页游戏都是需要使用iframe来嵌套使用的 利于自己网站SEO收录优化 那么就再复制一套程序 用二级目录或者二…

一种基于非线性滤波过程的旋转机械故障诊断方法(MATLAB)

在众多的旋转机械故障诊断方法中,包络分析,又称为共振解调技术,是目前应用最为成功的方法之一。首先,对激励引起的共振频带进行带通滤波,然后对滤波信号进行包络谱分析,通过识别包络谱中的故障相关的特征频…

【Linux基础IO】重定向以及原理分析

我们先来看下面一个情况&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #define filename "text.txt"int main(){close(1);//关…

[Linux] 系统管理

全局配置文件 用户个性化配置 配置文件的种类 alias命令和unalias命令 进程管理 进程表

使用Docker在Mac上部署OnlyOffice,预览编辑word、excel、ppt非常好

前端编辑word、ppt文档&#xff0c;开源免费方案并没有找到合适的&#xff0c;像wps、石墨文档都是自研的方案。实现过程中wps采用的svg方案&#xff0c;而石墨文档采用的是canvas&#xff0c;它们均是自己来实现编辑器&#xff0c;不依赖浏览器提供的编辑器&#xff08;conten…

嵌入式Linux:Linux系统中文件类型

目录 1、普通文件 2、目录文件 3、字符设备文件 4、块设备文件 5、符号链接文件 6、套接字文件 7、管道文件 8、stat命令和ls命令 8.1、stat命令 8.2、ls命令 9、stat、fstat、lstat函数 9.1、stat函数 9.2、fstat函数 9.3、lstat函数 在Windows系统中&#xff0…

【Python】已完美解决:(Python键盘中断报错问题) KeyboardInterrupt

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 已解决&#xff1a;Python中处理KeyboardInterrupt&#xff08;键盘中断&#xff09;报错问题 一、问题背景 在Python编程中&#xff0c;当我们运…

Java | Leetcode Java题解之第167题两数之和II-输入有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public int[] twoSum(int[] numbers, int target) {int low 0, high numbers.length - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return new int[]{low 1, high 1};} else i…

人工智能指数报告

2024人工智能指数报告&#xff08;一&#xff09;&#xff1a;研发 前言 全面分析人工智能的发展现状。 从2017年开始&#xff0c;斯坦福大学人工智能研究所&#xff08;HAI&#xff09;每年都会发布一份人工智能的研究报告&#xff0c;人工智能指数报告&#xff08;AII&…

数据结构:快速排序,归并排序,计数排序的实现分析

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.快排 1.1算法思想 选择一个基准元素&#xff0c;…

服务器SSH 免密码登录

1. 背景 为了服务器的安全着想&#xff0c;设置的服务器密钥非常长。但是这导致每次连接服务器都需要输入一长串的密码&#xff0c;把人折腾的很痛苦&#xff0c;所以我就在想&#xff0c;能不能在终端SSH的时候无需输入密码。 windows 可以使用 xshell 软件&#xff0c;会自…

安装react之nvm版本低引起的问题

1.背景 准备搭建一个react&#xff0c;然后看官网文档 创建项目&#xff0c;使用命令行 npx create-next-applatest 创建项目的流程都是正常的。当我准备运行项目的时候&#xff0c;报错了 原先的报错没有了&#xff0c;从网上找了一个类似的 重要的内容是&#xff1a;当前…

锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 锂电池寿命预测 | Matlab基于ARIMA的锂电池寿命预测 NASA数据集&#xff0c;B0005号电池&#xff0c;选择前110个数据训练&#xff0c;后58个数据测试预测。程序包含去趋势线、差分、平稳化及AIC准则判定p和q。命令窗…

【调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法】

调试笔记-系列文章目录 调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240619-Windows-Typescripts中类型不匹配的解决方法 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调试步骤搜…