Python Textract库:文本提取

news2025/3/12 11:00:16

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.coloradmin.cn/o/1841149.html

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

相关文章

Spark Core内核调度机制详解(第5天)

系列文章目录 如何构建DAG执行流程图 (掌握)如何划分Stage阶段 (掌握)Driver底层是如何运转 (掌握)确定需要构建多少分区(线程) (掌握) 文章目录 系列文章目录引言一、Spark内核调度(掌握)1.1、内容概述1.2、RDD的依赖1.3、DAG和Stage1.4、Spark Shuffl…

前端根据环境变量配置网页的title和favicon

前端根据环境变量配置网页的title和favicon 前言流程步骤一、设置environment文件二、在入口文件中配置三、删除index.html中的title和 icon link四、使用对应的打包命令进行部署 注意事项一、angular中,需要在angular.json添加favicon.ico额外的构建 前言 有些项目…

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

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> twoSum(vector<int>& numbers, int target) {int low 0, high numbers.size() - 1;while (low < high) {int sum numbers[low] numbers[high];if (sum target) {return {low …

STM32通过I2C软件读写MPU6050

文章目录​​​​​​​ 1. MPU6050 1.1 运动学概念 1.2 工作原理 2. 参数 2.1 量程选择 2.2 I2C从机地址配置 3. 硬件电路 4. 框架图 5. 软件和硬件波形对比 6. 软件I2C读写MPU6050 6.1 程序整体构架 6.2 一些需要注意的点&#xff1a; 6.3 MPU6050初始化配置 6…

Vue--》从零开始打造交互体验一流的电商平台(三)

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…

【2024】kafka streams的详细使用与案例练习(2)

目录 前言使用1、整体结构1.1、序列化 2、 Kafka Streams 常用的 API2.1、 StreamsBuilder2.2、 KStream 和 KTable2.3、 filter和 filterNot2.4、 map 和 mapValues2.5、 flatMap 和 flatMapValues2.6、 groupByKey 和 groupBy2.7、 count、reduce 和 aggregate2.8、 join 和 …

DSP28335:定时器

1.定时器介绍 1.1 定时器工作原理 TMS320F28335的CPU Time有三个&#xff0c;分别为Timer0&#xff0c;Timer1&#xff0c;Timer2&#xff0c;其中Timer2是为操作系统DSP/BIOS保留的&#xff0c;当未移植操作系统时&#xff0c;可用来做普通的定时器。这三个定时器的中断信号分…

RX8900/INS5A8900实时时钟-国产兼容RS4TC8900

该模块是一个符合I2C总线接口的实时时钟&#xff0c;包括一个32.768 kHz的DTCXO。 除了提供日历&#xff08;年、月、日、日、时、分、秒&#xff09;功能和时钟计数器功能外&#xff0c;该模块还提供了大量其他功能&#xff0c;包括报警功能、唤醒定时器功能、时间更新中断功能…

反激开关电源变压器设计1

特别注意&#xff1a;变压器计算出来的结果没有绝对的对与错 只要再全域范围内工作变压器不饱和就不能说变压器计算不对&#xff0c;&#xff08;输入全范围&#xff0c;输出全范围&#xff0c;温度度全范围&#xff09; 在变压器不饱和的情况下&#xff0c;只有优劣之分&…

数学建模基础:数学建模概述

目录 前言 一、数学建模的步骤 二、模型的分类 三、模型评价指标 四、常见的数学建模方法 实际案例&#xff1a;线性回归建模 步骤 1&#xff1a;导入数据 步骤 2&#xff1a;数据预处理 步骤 3&#xff1a;建立线性回归模型 步骤 4&#xff1a;模型验证 步骤 5&…

每日一练:攻防世界:简单的图片

这道题巨抽象&#xff01;巨抽象&#xff01;巨抽象&#xff01; 拿到图片&#xff0c;根据题目&#xff0c;尝试各种隐写方法。 这里就没思路了。查看WP。 根据题目的主办方&#xff1a;XSCTF。猜测XSCTF对应的是数字0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第44课-骨骼动画

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第44课-骨骼动画 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

使用docker离线制作es镜像,方便内网环境部署

1、自己在本地安装docker以及docker-compose 2、拉取elasticsearch镜像 docker pull elasticsearch:7.14.0 docker pull kibana:7.14.0 3、将拉取到的镜像打包到本地目录 docker save elasticsearch:7.14.0 -o /Users/yanjun.hou/es/elasticsearch-7.14.0.tar docker save kib…

Ps:快速添加签名或水印

一般情况下&#xff0c;建议使用矢量工具来创建签名或水印&#xff0c;这样可以保证签名图形任意缩放而不失真。但普通的摄影爱好者如果不太擅长使用矢量工具&#xff0c;可考虑下面的画笔预设法或动作法来给自己的照片添加签名&#xff0c;亦可满足日常出片需要。 ◆ ◆ ◆ …

GT_BERT文本分类

目录 GT-BERT结束语代码实现整个项目源码&#xff08;数据集模型&#xff09; GT-BERT 在为了使 BERT 模型能够得到广泛的应用,在保证模型分类准确率不降低的情况下,减少模型参数规模并降低时间复杂度,提出一种基于半监督生成对抗网络与 BERT 的文本分类模型 GT-BERT。模型的整…

DNS污染是什么?防止和清洗DNS污染的解决方案

在运营互联网业务中&#xff0c;通常会遇到各种各样的问题。其实DNS污染就是其中一个很严重的问题&#xff0c;它甚至会导致我们的业务中断&#xff0c;无法进行。今天就来了解一下DNS污染是什么&#xff1f;以及如何防止和清洗DNS污染。 什么是DNS&#xff1f; 首先我们要了解…

企业微信,机器人定时提醒

场景&#xff1a; 每天定时发送文字&#xff0c;提醒群成员事情&#xff0c;可以用机器人代替 人工提醒。 1&#xff09;在企业微信&#xff0c;创建机器人 2&#xff09;在腾讯轻联&#xff0c;创建流程&#xff0c;选择定时任务&#xff0c;执行操作&#xff08;企业微信机…

Qt利用Coin3D(OpenInventor)进行3d绘图

文章目录 1.安装1.1.下载coin3d1.2.下载quarter1.3.解压并合并 2.在Qt中使用3.画个网格4.加载wrl模型 1.安装 1.1.下载coin3d 首先&#xff0c;到官网下载[coin3d/coin] 我是Qt5.15.2vs2019的&#xff0c;因此我选择这个coin-4.0.2-msvc17-x64.zip 1.2.下载quarter 到官网…

milvus元数据解析工具milvusmetagui介绍使用

简介 milvusmetagui是一款用来对milvus的元数据进行解析的工具&#xff0c;milvus的元数据存储在etcd上&#xff0c;而且经过了序列化&#xff0c;通过etcd-manager这样的工具来查看是一堆二进制乱码&#xff0c;因此开发了这个工具对value进行反序列化解析。 在这里为了方便交…

arm-linux-strip 指令的作用

指令作用 arm-linux-strip 是一个用于从目标文件&#xff08;如可执行文件或对象文件&#xff09;中移除符号信息的工具。这些符号信息&#xff08;如函数名、变量名等&#xff09;在开发过程中很有用&#xff0c;因为它们允许调试器&#xff08;如 GDB&#xff09;确定内存地址…