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

embedded/2025/2/28 14:23:07/

pdfminer_0">一、使用pdfminer提取

python">word">import os
word">import re
word">from pdfminer.high_level word">import extract_text
word">import docx2txt
word">import jiebaword">def read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""word">try:text = extract_text(file_path)word">return textword">except Exception word">as e:word">print(f"读取 PDF 文件 {file_path} 时出错: {e}")word">return Noneword">def read_docx(file_path):"""读取 Word 文件内容:param file_path: Word 文件路径:return: 文件内容文本"""word">try:text = docx2txt.process(file_path)word">return textword">except Exception word">as e:word">print(f"读取 Word 文件 {file_path} 时出错: {e}")word">return Noneword">def clean_text(text):"""清理文本,去除无关字符和空白行:param text: 原始文本:return: 清理后的文本"""word">if text word">is None:word">return None# 去除特殊字符text = re.sub(r'[^\u4e00-\u9fa5a-zA-Z0-9\s]', '', text)# 去除多余的空白行text = re.sub(r'\n+', '\n', text).strip()word">return textword">def tokenize_text(text):"""对文本进行分词:param text: 输入文本:return: 分词后的字符串,以空格分隔"""word">if text word">is None:word">return ""word">return " ".join(jieba.lcut(text))word">def preprocess_files(folder_path, output_folder):"""对指定文件夹中的 PDF 和 Word 文件进行预处理,并保存处理后的结果:param folder_path: 包含原始文件的文件夹路径:param output_folder: 保存处理后文件的文件夹路径"""word">if word">not os.path.exists(output_folder):os.makedirs(output_folder)word">for root, dirs, files word">in os.walk(folder_path):word">for file word">in files:file_path = os.path.join(root, file)word">if file.endswith('.pdf'):text = read_pdf(file_path)word">elif file.endswith('.docx'):text = read_docx(file_path)word">else:word">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")# 保存处理后的文本到文件word">with open(output_file_path, 'w', encoding='utf-8') word">as f:f.write(tokenized_text)word">print(f"处理并保存文件: {output_file_path}")# 示例使用
word">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)word">print(f"输入文件夹的绝对路径: {abs_input_folder}")word">print(f"输出文件夹的绝对路径: {abs_output_folder}")# 检查路径是否存在word">if os.path.exists(abs_input_folder):word">print("输入文件夹路径存在。")word">else:word">print("输入文件夹路径不存在。")preprocess_files(input_folder, output_folder)

二、其他库和软件

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

Python 库

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

独立软件工具

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

http://www.ppmy.cn/embedded/168807.html

相关文章

c++中如何打印未知类型对象的类型

在 C 中要打印未知类型对象的类型名称,可以通过以下方法实现: 目录 方法一:使用 typeid 和 name()(需包含 ) 使用示例: 问题与改进: 方法二:编译时类型名称(C17 起&…

MS SQL 2008 技术内幕:T-SQL 语言基础

《MS SQL 2008 技术内幕:T-SQL 语言基础》是一部全面介绍 Microsoft SQL Server 2008 中 T-SQL(Transact-SQL)语言的书籍。T-SQL 是 SQL Server 的扩展版本,增加了编程功能和数据库管理功能,使得开发者和数据库管理员能…

自然语言处理:文本规范化

介绍 大家好!很高兴又能在这儿和大家分享自然语言处理相关的知识了。在上一篇发布于自然语言处理:初识自然语言处理-CSDN博客为大家初步介绍了自然语言处理的基本概念。而这次,我将进一步深入这个领域,和大家聊聊自然语言处理中一…

记录一次bug,xgplayer西瓜视频播放切进度条视频加载失败

西瓜视频的官方文档&#xff1a;西瓜播放器 大概的代码&#xff1a; <div id"video-player"></div>//初始化initXgPlayer () {this.Player new Player({id: "video-player",url: this.currentVideo.videoPath,width: "100%", heigh…

算法day1 dfs搜索2题

一 火星人 拿到这种类似于排序的&#xff0c;这个就好比如我们之前学习dfs基础的时候里面的指数型枚举 指数型枚举数据与数据之间没有任何枚举&#xff0c;就比如选这个数字与不选组合型枚举数据与数据之间有联系&#xff0c;下一个数字不可以给上一个数字排列型枚举数据与数…

机器学习基础知识使用总结

1.datascience import numpy as np""" numpy :数学计算库,主要用于数组计算"""print(np.__version__) #ndarry数组的创建与基本操作##将列表转换为数组 arr np.array([1,2,3,4,5]) print(arr) print(arr.itemsize)#创建等差数列数组 arrnp.arang…

vue中computed方法使用;computed返回函数

文章目录 1.正常使用computed2.使用computed返回可传参的函数 1.正常使用computed 一般我们使用computed返回一个变量字段&#xff0c;这个字段会根据具体的某个变量计算得到 例如 <div>{{num}}--{{num10}}</div>let num ref(1) let num10 computed(()>{ret…

数据如何安全“过桥”?分类分级与风险评估,守护数据流通安全

信息化高速发展&#xff0c;数据已成为企业的核心资产&#xff0c;驱动着业务决策、创新与市场竞争力。随着数据开发利用不断深入&#xff0c;常态化的数据流通不仅促进了信息的快速传递与共享&#xff0c;还能帮助企业快速响应市场变化&#xff0c;把握商业机遇&#xff0c;实…