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

news/2025/2/25 11:47:44

pdfminer_0">一、使用pdfminer提取

python">word">import os
word">import re
word">from pdfminer.high_level word">import extract_text
word">import docx2txt
word">import jieba

word">def read_pdf(file_path):
    """
    读取 PDF 文件内容
    :param file_path: PDF 文件路径
    :return: 文件内容文本
    """
    word">try:
        text = extract_text(file_path)
        word">return text
    word">except Exception word">as e:
        word">print(f"读取 PDF 文件 {file_path} 时出错: {e}")
        word">return None

word">def read_docx(file_path):
    """
    读取 Word 文件内容
    :param file_path: Word 文件路径
    :return: 文件内容文本
    """
    word">try:
        text = docx2txt.process(file_path)
        word">return text
    word">except Exception word">as e:
        word">print(f"读取 Word 文件 {file_path} 时出错: {e}")
        word">return None

word">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 text

word">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">continue
            cleaned_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 PyPDF2

word">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 text

pdf_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 pdfplumber

word">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 text

pdf_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 parser

word">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.niftyadmin.cn/n/5865457.html

相关文章

Skyeye 云智能制造办公系统 VUE 版本 v3.15.10 发布

Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言:大模型时代的推理加速革命 在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能,这正是大模型推理优化的…

基于SpringBoot和Leaflet的邻省GDP可视化实战

目录 前言 一、技术实现路径 1、空间数据检索 2、数据展示检索流程 二、SpringBoot后台实现 1、模型层实现 2、控制层实现 三、WebGIS前端实现 1、控制面展示 2、成果展示 四、总结 前言 在数字化浪潮席卷全球的今天,数据已成为驱动社会经济发展、指导政策…

从入门到精通Rust:资源库整理

今天给大家分享一些优质的Rust语言学习资源,适合不同水平的学习者。前三个官方资源是我Rust语言的启蒙老师,非常平易近人。 官方资源 The Rust Programming Language (The Book) 链接: https://doc.rust-lang.org/book/ 简介: 官方权威指南&#xff0c…

Flutter 上的 Platform 和 UI 线程合并是怎么回事?它会带来什么?

Flutter 在 3.29 发布了一个「重大」调整:从 3.29 开始,Android 和 iOS 上的 Flutter 将在应用的主线程上执行 Dart 代码,并且不再有单独的 Dart UI 线程 也许一些人对于这个概念还比较陌生,有时间可以看看以前发过的 《深入理解…

多线程运行测试文件

目录 一、测试时间对比多线程单线程 二、python多线程实现三、阻塞主线程确保所有子进程/线程执行完毕 跑测试的时候想提高效率,多个模型的跑。之前设计的就是for循环,等一个模型跑完另一个跑,不过时间上比较慢。想试试多线程的效果。其实多开…

Qwen2.5-VL技术报告:多模态大模型的新SOTA!视觉理解能力全面超越GPT-4o

1.摘要 Qwen2.5-VL是Qwen视觉语言系列的最新旗舰产品,在基础功能和创新功能方面都有了显著的进步。Qwen2.5-VL通过增强的视觉识别、精确的对象定位、强大的文档解析和长视频理解,在理解和与世界交互方面实现了重大飞跃。因此,Qwen2.5-VL不仅…

RK3399 Android7 Ethernet Tether功能实现

在Android机顶盒产品,对于以太网与WiFi间的关系有如下: 1、以太网与WiFi STA均可连接路由器访问外网; 2、WiFi AP功能可以共享以太网访问外网。 而本文档是对于2的变动,实现通过以太网共享WiFi STA访问外网,并在此基础上可以共享4G/5G网络(设备支持情况下),下面是相应…