【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 文件,選擇“轉換” - “導出為”,在導出格式中選擇“文本”,然后設置相關參數并保存文件。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71899.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式八股文(五)硬件電路篇

一、名詞概念 1. 整流和逆變 (1)整流:整流是將交流電(AC)轉變為直流電(DC)。常見的整流電路包括單向整流(二極管)、橋式整流等。 半波整流:只使用交流電的正…

精選案例展 | 智己汽車—全棧可觀測驅動智能化運營與成本優化

本案例為“觀測先鋒 2024 可觀測平臺創新應用案例大賽”精選案例,同時榮獲IT168“2024技術卓越獎評選-年度創新解決方案”獎。 項目背景 近年來,中國汽車行業進入轉型升級階段,智能網聯技術成為行業發展的核心。車聯網、自動駕駛等技術的加速…

速通HTML

目錄 HTML基礎 1.快捷鍵 2.標簽 HTML進階 1.列表 a.無序列表 b.有序列表 c.定義列表 2.表格 a.內容 b.合并單元格 3.表單 a.input標簽 b.單選框 c.上傳文件 4.下拉菜單 5.文本域標簽 6.label標簽 7.按鈕標簽 8.無語義的布局標簽div與span 9.字符實體 HTML…

【Python模塊】——pymysql

pymysql是python操作mysql的標準庫,可以通過pip install快速導入pymysql包操作數據庫 使用pymysql操作mysql 簡單demo import pymysql connect pymysql.connect(host"localhost",port3306,user"root",password"root",database&quo…

IP離線庫助力破解網絡反詐難題

毫秒級響應識別異常訪問 IP離線庫集成全球全量IP地址的詳細信息,包括地理地址查詢、運營商、經緯度、代理識別等多種維度數據。例如: 當用戶賬號頻繁從北京、越南等多地IP登錄時,系統將自動觸發風險預警; 檢測到訪問IP為已知機…

lattice hdl實現spi接口

在lattice工具鏈中實現SPI接口通常涉及以下步驟: 定義硬件SPI接口的管腳。配置SPI時鐘和模式。編寫SPI主機或從機的控制邏輯。 展示了如何在Lattice工具鏈中使用HDL語言(例如Verilog)來配置SPI接口: lattice工程 頂層:spi_slave_top.v `timescale 1ns/ 1ps module spi_…

Spring 循環依賴解析與解決方案

文章目錄 1. 什么是循環依賴?1.1 概念解析1.2 示例代碼 2. 循環依賴的類型2.1 構造器循環依賴(不可解決 ?)2.2 Setter 方式或 Autowired 方式的循環依賴(可解決 ?) 3. 解決循環依賴的方式3.1 方式一:使用…

Cesium@1.126.0,創建3D瓦片,修改樣式

第一步:添加3D建筑 Cesium.createOsmBuildingsAsync()這是一個異步方法,所以要寫在一個異步函數里 創建一個函數 const create3DBuilding async (viewer) > {try {// 添加3D建筑const tileset await Cesium.createOsmBuildingsAsync();viewer.scen…

力扣-貪心-1005 k次取反后最大化的數組和

思路 找到絕對值最大的,然后如果是負數就變成正的,所有數遍歷完之后,有兩種情況,一種是k已經為0了,不需要再取反了,一種是所有數都為正數,k不為0,此時對絕對值最小的數操作即可 代…

vue2項目打包后js文件過大, 首次加載緩慢

vue2項目打包后js文件過大, 首次加載緩慢 安裝插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…

高級SQL技術在Python項目中的應用:ORM與深度性能優化

引言 在現代Python項目開發中,數據庫交互遠不止是數據的簡單存取,它已成為構建高性能、可維護應用的核心瓶頸和關鍵能力所在。 僅僅依賴基礎SQL查詢,雖然入門簡單,卻難以應對日益增長的應用挑戰。這些挑戰主要體現在以下幾個方面: 性能瓶頸: 數據量劇增: 從百萬到數十億乃…

基于 C++ Qt 的 Fluent Design 組件庫 QFluentWidgets

簡介 QFluentWidgets 是一個基于 Qt 的 Fluent Designer 組件庫,內置超過 150 個開箱即用的 Fluent Designer 組件,支持亮暗主題無縫切換和自定義主題色。 編譯示例 以 Qt5 為例(Qt6 也支持),將 libQFluentWidgets.d…

抖音視頻如何下載保存去水印

隨著短視頻平臺的興起,抖音作為國內最受歡迎的短視頻平臺之一,吸引了大量用戶上傳和觀看各種創意視頻。許多用戶在瀏覽抖音視頻時,往往會想要保存一些有趣或精彩的視頻片段,但抖音視頻通常會有水印,影響觀看體驗。為了…

React 源碼揭秘 | 更新隊列

前面幾篇遇到updateQueue的時候,我們把它先簡單的當成了一個隊列處理,這篇我們來詳細討論一下這個更新隊列。 有關updateQueue中的部分,可以見源碼 UpdateQueue實現 Update對象 我們先來看一下UpdateQueue中的內容,Update對象&…

[SQL] 事務的四大特性(ACID)

🎄事務的四大特性 以下就是事務的四大特性,簡稱ACID。 原子性📢事務時不可分割的最小操作單元,要么全部成功,要么全部失敗。一致性📢事務完成后,必須使所有的數據都保持一致隔離性&#x1f4e2…

DeepSeek 提示詞:基礎結構

🧑 博主簡介:CSDN博客專家,歷代文學網(PC端可以訪問:https://literature.sinhy.com/#/?__c1000,移動端可微信小程序搜索“歷代文學”)總架構師,15年工作經驗,精通Java編…

如何使用 Python 連接 MySQL 數據庫?

在Python開發中,連接MySQL數據庫是一個常見的需求。 我們可以使用多種庫來實現這一功能,其中最常用的是mysql-connector-python和PyMySQL。 下面我將詳細介紹如何使用這兩個庫來連接MySQL數據庫,并提供一些實際開發中的建議和注意事項。 1…

Apache DolphinScheduler系列1-單節點部署及測試報告

文章目錄 整體說明一、部署環境二、版本號三、部署方案四、部署步驟4.1、上傳部署包4.2、創建外部數據庫4.3、修改元數據庫配置4.4、上傳MySQLl驅動程序4.5、初始化外部數據庫4.6、啟停服務4.7、訪問頁面五、常見問題及解決方式5.1、時間不一致5.2、異常終止5.3、大量日志5.4、…

LLM之論文閱讀——Context Size對RAG的影響

前言 RAG 系統已經在多個行業中得到廣泛應用,尤其是在企業內部文檔查詢等場景中。盡管 RAG 系統的應用日益廣泛,關于其最佳配置的研究卻相對缺乏,特別是在上下文大小、基礎 LLM 選擇以及檢索方法等方面。 論文原文: On the Influence of Co…

人工智能(AI):科技新紀元的領航者

摘要 人工智能(AI)作為當今科技領域最具變革性的力量之一,正以驚人的速度重塑著我們的世界。本文旨在全面且專業地介紹人工智能,涵蓋其定義、發展歷程、關鍵技術、應用領域、面臨的挑戰以及未來展望等方面,以期為讀者…