python使用pdfminer解析pdf文件的方法示例
最近要做個(gè)從 pdf 文件中抽取文本內(nèi)容的工具,大概查了一下 python 里可以使用 pdfminer 來(lái)實(shí)現(xiàn)。下面就看看怎樣使用吧。
PDFMiner是一個(gè)可以從PDF文檔中提取信息的工具。與其他PDF相關(guān)的工具不同,它注重的完全是獲取和分析文本數(shù)據(jù)。PDFMiner允許你獲取某一頁(yè)中文本的準(zhǔn)確位置和一些諸如字體、行數(shù)的信息。它包括一個(gè)PDF轉(zhuǎn)換器,可以把PDF文件轉(zhuǎn)換成HTML等格式。它還有一個(gè)擴(kuò)展的PDF解析器,可以用于除文本分析以外的其他用途。
PDFMiner內(nèi)置兩個(gè)好用的工具:pdf2txt.py和dumppdf.py
pdf2txt.py從PDF文件中提取所有文本內(nèi)容。但不能識(shí)別畫(huà)成圖片的文本,這需要特征識(shí)別。對(duì)于加密的PDF你需要提供一個(gè)密碼才能解析,對(duì)于沒(méi)有提取權(quán)限的PDF文檔你得不到任何文本。
dumppdf.py把PDF文件內(nèi)容變成pseudo-XML格式。這個(gè)程序主要用于debug,但是它也可能用于提取一些有意義的內(nèi)容(比如圖片)。
官方主頁(yè):https://euske.github.io/pdfminer/
其特征有:1、完全使用python編寫(xiě)。(適用于2.4或更新版本)2、解析,分析,并轉(zhuǎn)換成PDF文檔。3、PDF-1.7規(guī)范的支持。(幾乎)4、中日韓語(yǔ)言和垂直書(shū)寫(xiě)腳本支持。5、各種字體類(lèi)型(Type1、TrueType、Type3,和CID)的支持。6、基本加密(RC4)的支持。7、PDF與HTML轉(zhuǎn)換。8、綱要(TOC)的提取。9、標(biāo)簽內(nèi)容提取。10、通過(guò)分組文本塊重建原始的布局。
如果你的Python有安裝pip模塊,就可以通過(guò)命令“python pip install pdfminer”,自動(dòng)安裝pdfminer。
解析pdf文件用到的類(lèi):
- PDFParser:從一個(gè)文件中獲取數(shù)據(jù)
- PDFDocument:保存獲取的數(shù)據(jù),和PDFParser是相互關(guān)聯(lián)的
- PDFPageInterpreter處理頁(yè)面內(nèi)容
- PDFDevice將其翻譯成你需要的格式
- PDFResourceManager用于存儲(chǔ)共享資源,如字體或圖像。
python的工具,安裝當(dāng)然是使用pip安裝了。
pip install pdfminer
命令行方式
為了使用方便,pdfminer 提供了一個(gè)命令行工具來(lái)直接轉(zhuǎn)換pdf文件,使用方法如下:
pdf2txt.py <path_to_pdf_file>
編程方式
除了命令行方式以外,對(duì)于復(fù)雜應(yīng)用場(chǎng)景,pdfminer 也提供了以編程方式來(lái)轉(zhuǎn)換 pdf 文件,主要使用下面幾個(gè)類(lèi)來(lái)實(shí)現(xiàn):
- PDFParser: 用來(lái)解析pdf文件。
- PDFDocument:用來(lái)保存 PDFParser 解析后的對(duì)象。
- PDFPageInterpreter:用來(lái)處理解析后的文檔頁(yè)面內(nèi)容。
- PDFResourceManager:pdf 共享資源管理器,用于存儲(chǔ)共享資源,如字體或圖像。
下面看一個(gè)例子:
#!/usr/bin/env python # -*- coding: utf-8 -*- from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams import StringIO class PDFUtils(): def __init__(self): pass def pdf2txt(self, path): output = StringIO.StringIO() with open(path, 'rb') as f: praser = PDFParser(f) doc = PDFDocument(praser) if not doc.is_extractable: raise PDFTextExtractionNotAllowed pdfrm = PDFResourceManager() laparams = LAParams() device = PDFPageAggregator(pdfrm, laparams=laparams) interpreter = PDFPageInterpreter(pdfrm, device) for page in PDFPage.create_pages(doc): interpreter.process_page(page) layout = device.get_result() for x in layout: if hasattr(x, "get_text"): content = x.get_text() output.write(content) content = output.getvalue() output.close() return content if __name__ == '__main__': path = u'/tmp/abc.pdf' pdf_utils = PDFUtils() print pdf_utils.pdf2txt(path)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python 每天如何定時(shí)啟動(dòng)爬蟲(chóng)任務(wù)(實(shí)現(xiàn)方法分享)
python 每天如何定時(shí)啟動(dòng)爬蟲(chóng)任務(wù)?今天小編就為大家分享一篇python 實(shí)現(xiàn)每天定時(shí)啟動(dòng)爬蟲(chóng)任務(wù)的方法。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼
這篇文章主要介紹了numpy使用技巧之?dāng)?shù)組過(guò)濾實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法分析
這篇文章主要介紹了Python系統(tǒng)監(jiān)控模塊psutil功能與經(jīng)典用法,簡(jiǎn)單講述了psutil模塊的功能、原理并結(jié)合具體實(shí)例形式分析了Python使用psutil模塊針對(duì)CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)等信息的讀取相關(guān)操作技巧,需要的朋友可以參考下2018-05-05python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法
這篇文章主要介紹了python實(shí)現(xiàn)指定字符串補(bǔ)全空格、前面填充0的方法 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Python第三方庫(kù)jieba庫(kù)與中文分詞全面詳解
jieba庫(kù)是一款優(yōu)秀的Python第三方中文分詞庫(kù),jieba支持三種分詞模式:精確模式、全模式和搜索引擎模式,下面這篇文章主要給大家介紹了關(guān)于Python第三方庫(kù)jieba庫(kù)與中文分詞的相關(guān)資料,需要的朋友可以參考下2022-07-07Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子
這篇文章主要介紹了Python random模塊(獲取隨機(jī)數(shù))常用方法和使用例子,需要的朋友可以參考下2014-05-05