当前位置: 首页 > news >正文

【python】提取word\pdf格式内容到txt文件

一、使用pdfminer提取

import os
import re
from pdfminer.high_level import extract_text
import docx2txt
import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text = extract_text(file_path)return textexcept Exception as e:print(f"读取 PDF 文件 {file_path} 时出错: {e}")return Nonedef read_docx(file_path):"""读取 Word 文件内容:param file_path: Word 文件路径:return: 文件内容文本"""try:text = docx2txt.process(file_path)return textexcept Exception as e:print(f"读取 Word 文件 {file_path} 时出错: {e}")return Nonedef clean_text(text):"""清理文本,去除无关字符和空白行:param text: 原始文本:return: 清理后的文本"""if text is None:return None# 去除特殊字符text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\s]', '', text)# 去除多余的空白行text = re.sub(r'\n+', '\n', text).strip()return textdef tokenize_text(text):"""对文本进行分词:param text: 输入文本:return: 分词后的字符串,以空格分隔"""if text is None:return ""return " ".join(jieba.lcut(text))def preprocess_files(folder_path, output_folder):"""对指定文件夹中的 PDF 和 Word 文件进行预处理,并保存处理后的结果:param folder_path: 包含原始文件的文件夹路径:param output_folder: 保存处理后文件的文件夹路径"""if not os.path.exists(output_folder):os.makedirs(output_folder)for root, dirs, files in os.walk(folder_path):for file in files:file_path = os.path.join(root, file)if file.endswith('.pdf'):text = read_pdf(file_path)elif file.endswith('.docx'):text = read_docx(file_path)else:continuecleaned_text = clean_text(text)tokenized_text = tokenize_text(cleaned_text)# 生成输出文件名file_name, _ = os.path.splitext(file)output_file_path = os.path.join(output_folder, f"{file_name}_processed.txt")# 保存处理后的文本到文件with open(output_file_path, 'w', encoding='utf-8') as f:f.write(tokenized_text)print(f"处理并保存文件: {output_file_path}")# 示例使用
if __name__ == "__main__":input_folder = 'your_input_folder_path'  # 替换为实际包含 PDF 和 Word 文件的文件夹路径output_folder = 'your_output_folder_path'  # 替换为实际保存处理后文件的文件夹路径preprocess_files(input_folder, output_folder)

代码解释

  1. tokenize_text 函数修改:此函数将分词后的结果用空格连接成字符串,方便后续保存到文件。

  2. preprocess_files 函数扩展

    • 增加了 output_folder 参数,用于指定保存处理后文件的文件夹路径。
    • 检查输出文件夹是否存在,如果不存在则创建。
    • 对于每个处理后的文件,生成对应的输出文件名,格式为原文件名加上 _processed.txt
    • 使用 with open 语句将处理后的文本写入到对应的输出文件中。
  3. 主程序调用:需要将 your_input_folder_path 替换为实际包含 PDF 和 Word 文件的文件夹路径,将 your_output_folder_path 替换为实际保存处理后文件的文件夹路径。运行代码后,处理后的文本将保存到指定的输出文件夹中。

  4. 测试相对路径

    # 打印绝对路径#使用os.path.exists 函数检查输入和输出路径是否存在abs_input_folder = os.path.abspath(input_folder)abs_output_folder = os.path.abspath(output_folder)print(f"输入文件夹的绝对路径: {abs_input_folder}")print(f"输出文件夹的绝对路径: {abs_output_folder}")# 检查路径是否存在if os.path.exists(abs_input_folder):print("输入文件夹路径存在。")else:print("输入文件夹路径不存在。")preprocess_files(input_folder, output_folder)

二、其他库和软件

除了 pdfminer 外,还有许多其他可以提取 PDF 文本的工具:

Python 库

1. PyPDF2
  • 特点:一个纯 Python 编写的库,用于处理 PDF 文件,功能较为基础,能够实现简单的文本提取、合并、分割等操作,使用起来比较简单。
  • 示例代码
import PyPDF2def extract_text_pypdf2(pdf_path):text = ""with open(pdf_path, 'rb') as file:pdf_reader = PyPDF2.PdfReader(file)num_pages = len(pdf_reader.pages)for page_num in range(num_pages):page = pdf_reader.pages[page_num]text += page.extract_text()return textpdf_path = 'your_pdf_file.pdf'
extracted_text = extract_text_pypdf2(pdf_path)
print(extracted_text)
2. pdfplumber
  • 特点:基于 pdfminer 开发,提供了更高级、更方便的 API,能够处理更复杂的 PDF 布局,支持表格提取、页面分析等功能,对于具有结构化数据的 PDF 文件处理效果较好。
  • 示例代码
import pdfplumberdef extract_text_pdfplumber(pdf_path):text = ""with pdfplumber.open(pdf_path) as pdf:for page in pdf.pages:text += page.extract_text()return textpdf_path = 'your_pdf_file.pdf'
extracted_text = extract_text_pdfplumber(pdf_path)
print(extracted_text)
3. tika
  • 特点:是基于 Apache Tika 的 Python 封装,Tika 是一个强大的内容分析工具,支持多种文件格式的解析,包括 PDF。它可以处理各种复杂的 PDF 文件,并且能够自动检测文件类型和编码。
  • 示例代码
from tika import parserdef extract_text_tika(pdf_path):parsed = parser.from_file(pdf_path)return parsed['content']pdf_path = 'your_pdf_file.pdf'
extracted_text = extract_text_tika(pdf_path)
print(extracted_text)

独立软件工具

1. Adobe Acrobat Pro DC
  • 特点:Adobe 公司开发的专业 PDF 编辑软件,功能强大,除了文本提取外,还支持 PDF 的创建、编辑、注释、签名等多种操作。可以通过复制粘贴或导出为其他格式(如文本、Word 等)来提取 PDF 中的文本。
  • 操作步骤:打开 PDF 文件,选择“文件” - “另存为”,在保存类型中选择“纯文本”,然后指定保存路径和文件名即可。
2. Smallpdf
  • 特点:一款在线 PDF 处理工具,提供了多种 PDF 处理功能,包括文本提取。无需安装软件,只需在浏览器中访问其网站,上传 PDF 文件,即可快速提取文本。支持免费使用,但对文件大小和处理次数有一定限制。
  • 操作步骤:访问 Smallpdf 网站,选择“PDF 转 TXT”功能,上传 PDF 文件,等待处理完成后下载提取的文本文件。
3. Nitro Pro
  • 特点:一款功能丰富的 PDF 处理软件,支持文本提取、编辑、转换等多种操作。具有直观的用户界面和高效的处理速度,适合个人和企业用户使用。
  • 操作步骤:打开 PDF 文件,选择“转换” - “导出为”,在导出格式中选择“文本”,然后设置相关参数并保存文件。

相关文章:

【python】提取word\pdf格式内容到txt文件

一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...

002简单MaterialApp主题和Scaffold脚手架

002最简单的MaterialApp主题和Scaffold脚手架使用导航栏_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1RZ421p7BL?spm_id_from333.788.videopod.episodes&vd_source68aea1c1d33b45ca3285a52d4ef7365f&p1501.MaterialApp纯净的 /*MaterialApp 是主题,自带方向设…...

jdk21下载、安装(Windows、Linux、macOS)

Windows 系统 1. 下载安装 访问 Oracle 官方 JDK 下载页面 或 OpenJDK 下载页面,根据自己的系统选择合适的 Windows 版本进行下载(通常选择 .msi 安装包)。 2. 配置环境变量 右键点击 “此电脑”,选择 “属性”。 在左侧导航栏…...

Baklib知识中台引领服务智能化

智能中枢系统架构解析 Baklib 知识中台的智能中枢系统采用分层解耦设计,通过数据接入层、知识处理层与服务输出层的三级架构实现全链路智能化管理。在数据接入层,系统支持多源异构数据的实时采集与标准化清洗,涵盖结构化数据(如客…...

Spring源码分析の循环依赖

文章目录 前言一、循环依赖问题二、循环依赖的解决三、整体流程分析 前言 常见的可能存在循环依赖的情况如下: 两个bean中互相持有对方作为自己的属性。   类似于: 两个bean中互相持有对方作为自己的属性,且在构造时就需要传入&#xff1a…...

检查SSH安全配置-关于“MaxStartups参数”

官方文档介绍 在《检查SSH安全配置-sshd服务端未认证连接最大并发量配置》中我们简略地阐述了“MaxStartups参数”在SSH安全配置中的意义。但是,并未对该参数做详细说明。 为啥没有详细说明呢?因为俺也没弄明白! 我们先看一下sshd_config的…...

某查”平台请求头反爬技术解析与应对

一、请求头反爬技术概述 请求头(HTTP Header)是 HTTP 协议中用于在客户端和服务器之间传递信息的一部分。它包含了请求的来源、用户代理、内容类型等关键信息。许多网站通过检查请求头中的特定字段来判断请求是否来自合法的浏览器,从而防止爬…...

MOE结构解读和deepseek的MoE结构

不管dense还是MoE(Mixture of Experts)都是基于transformer的。 下面回顾下解码器块的主要架构: 注意力机制-层归一化&残差连接-FFN前馈神经网络-层归一化&残差连接。 dense模型是沿用了这个一架构,将post-norm换为pre-no…...

LLM+多智能体协作:基于CrewAI与DeepSeek的邮件自动化实践

文章目录 引言理解 Flows(工作流)与 Crews(协作组)一、环境准备与工具安装1.1 Python环境搭建1.2 创建并激活虚拟环境1.3 安装核心依赖库(crewai、litellm) 二、本地DeepSeek R1大模型部署2.1 Ollama框架安…...

基于C++“简单且有效”的“数据库连接池”

前言 数据库连接池在开发中应该是很常用的一个组件,他可以很好的节省连接数据库的时间开销;本文基使用C实现了一个简单的数据库连接池,代码量只有400行只有,但是压力测试效果很好;欢迎收藏 关注,本人将会…...

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…...

Redis 集群的三种模式:一主一从、一主多从和多主多从

本文记述了博主在学习 Redis 在大型项目下的使用方式,包括如何设置Redis主从节点,应对突发状况如何处理。在了解了Redis的集群搭建和相关的主从复制以及哨兵模式的知识以后,进而想要了解 Redis 集群如何使用,如何正确使用&#xf…...

面试题——简述Vue 3的服务器端渲染(SSR)是如何工作的?

面试题——简述Vue3的服务器端渲染(SSR)是如何工作的? 服务器端渲染(SSR)已经成为了一个热门话题。Vue 3,作为一款流行的前端框架,也提供了强大的SSR支持。那么,Vue 3的SSR究竟是如…...

2.25DFS和BFS刷题

洛谷P1101单词方阵:用sta存字符串,for找到‘y的位置,然后dfs对字符串用for进行一个一个的判断,不符合就return,下面再用for进行book标记,能执行下面的for说明上面没有return,所以说明找到&#…...

C语言基本知识------指针(4)

1. 回调函数是什么? 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另⼀个函数,当这个指针被⽤来调⽤其所指向的函数 时,被调⽤的函数就是回调函数。 void qsort(void base,//指针…...

【OMCI实践】ONT上线过程的omci消息(六)

引言 在前四篇文章中,主要介绍了ONT上线过程的OMCI交互的第一、二、三个阶段omci消息,本篇介绍第四个阶段,OLT下发配置到ONT。前三个阶段,每个厂商OLT和ONT都遵循相同标准,OMCI的交换过程大同小异。但第四个阶段&…...

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…...

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票

腾讯SQL面试题解析:如何找出连续5天涨幅超过5%的股票 作者:某七年数据开发工程师 | 2025年02月23日 关键词:SQL窗口函数、连续问题、股票分析、腾讯面试题 一、问题背景与难点拆解 在股票量化分析场景中,"连续N天满足条件"是高频面试题类型。本题要求在单表stoc…...

HybridCLR+Adressable+Springboot热更

本文章会手把手教大家如何搭建HybridCLRAdressableSpringboot热更。 创作不易,动动发财的小手点个赞。 安装华佗 首先我们按照官网的快速上手指南搭建一个简易的项目: 快速上手 | HybridCLR 注意在热更的代码里添加程序集。把用到的工具放到程序集里…...

电脑连接示波器显示波形

通过网线连接示波器和电脑,将示波器波形显示在电脑上直接复制图片至报告中,以下是配置步骤。 一、设备 网线,Tektronix示波器,电脑 二、使用步骤 1.用网线连接电脑和示波器 2.电脑关掉WiFi,查看IPv4网关地址&#xf…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层&#xf…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解

进来是需要留言的&#xff0c;先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码&#xff0c;输入的<>当成字符串处理回显到页面中&#xff0c;看来只是把用户输…...

k8s从入门到放弃之HPA控制器

k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率&#xff08;或其他自定义指标&#xff09;来调整这些对象的规模&#xff0c;从而帮助应用程序在负…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…...

Yii2项目自动向GitLab上报Bug

Yii2 项目自动上报Bug 原理 yii2在程序报错时, 会执行指定action, 通过重写ErrorAction, 实现Bug自动提交至GitLab的issue 步骤 配置SiteController中的actions方法 public function actions(){return [error > [class > app\helpers\web\ErrorAction,],];}重写Error…...

__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ is not explicitly defined.

这个警告表明您在使用Vue的esm-bundler构建版本时&#xff0c;未明确定义编译时特性标志。以下是详细解释和解决方案&#xff1a; ‌问题原因‌&#xff1a; 该标志是Vue 3.4引入的编译时特性标志&#xff0c;用于控制生产环境下SSR水合不匹配错误的详细报告1使用esm-bundler…...