国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

從PDF中提取信息----PDFMiner

2019-11-14 16:53:48
字體:
供稿:網(wǎng)友

今天由于某種原因需要將pdf中的文本提取出來,就去搜了下資料,發(fā)現(xiàn)PDFMiner是針對

內(nèi)容提取的,雖然最后發(fā)現(xiàn)pdf里面的文本全都是圖片,就沒整成功,不過試了個文本可復(fù)制的

那種pdf文件,發(fā)現(xiàn)還是蠻好用的

PDFMiner----python的PDF解析器和分析器

1.官方文檔:http://www.unixuser.org/~euske/python/pdfminer/index.html

2.特征   

  • 完全使用python編寫。 (適用于2.4或更新版本)   
  • 解析,分析,并轉(zhuǎn)換成PDF文檔。  
  • PDF-1.7規(guī)范的支持。 (幾乎)   
  • 中日韓語言和垂直書寫腳本支持。   
  • 各種字體類型(Type1、TrueType、Type3,和CID)的支持。    
  • 基本加密(RC4)的支持。     
  • PDF與HTML轉(zhuǎn)換。  
  • 綱要(TOC)的提取。    
  • 標(biāo)簽內(nèi)容提取。     
  • 通過分組文本塊重建原始的布局。

3.安裝

注:使用源碼安裝,并且處理中日韓語言的時候還需要一個額外的安裝步驟

4.用法

4.1解析pdf文件用到的類:

  • PDFParser:從一個文件中獲取數(shù)據(jù)
  • PDFDocument:保存獲取的數(shù)據(jù),和PDFParser是相互關(guān)聯(lián)的
  • PDFPageInterPReter處理頁面內(nèi)容
  • PDFDevice將其翻譯成你需要的格式
  • PDFResourceManager用于存儲共享資源,如字體或圖像。

PDFMiner的類之間的關(guān)系圖:

http://www.unixuser.org/~euske/python/pdfminer/objrel.png

 

4.2基本用法

4.2.1解析pdf文件

 

 1 from pdfminer.pdfparser import PDFParser 2 from pdfminer.pdfdocument import PDFDocument 3 from pdfminer.pdfpage import PDFPage 4 from pdfminer.pdfpage import PDFTextExtractionNotAllowed 5 from pdfminer.pdfinterp import PDFResourceManager 6 from pdfminer.pdfinterp import PDFPageInterpreter 7 from pdfminer.pdfdevice import PDFDevice 8  9 10 fp = open('mypdf.pdf', 'rb')11 #創(chuàng)建一個PDF文檔解析器對象12 parser = PDFParser(fp)13 #創(chuàng)建一個PDF文檔對象存儲文檔結(jié)構(gòu)14 #提供密碼初始化,沒有就不用傳該參數(shù)15 document = PDFDocument(parser, passWord)16 #檢查文件是否允許文本提取17 if not document.is_extractable:18     raise PDFTextExtractionNotAllowed19 #創(chuàng)建一個PDF資源管理器對象來存儲共享資源20 rsrcmgr = PDFResourceManager()21 #創(chuàng)建一個pdf設(shè)備對象22 device = PDFDevice(rsrcmgr)23 #創(chuàng)建一個PDF解析器對象24 interpreter = PDFPageInterpreter(rsrcmgr, device)25 #處理文檔當(dāng)中的每個頁面26 for page in PDFPage.create_pages(document):27     interpreter.process_page(page)

 

 當(dāng)然這只是進(jìn)行解析,還可進(jìn)行布局分析,我的數(shù)據(jù)就是從這一步的到的

4.2.2布局分析

首先對第一步的代碼進(jìn)行修改和增加

 1 from pdfminer.layout import LAParams 2 from pdfminer.converter import PDFPageAggregator 3  4 # 設(shè)定參數(shù)進(jìn)行分析 5 laparams = LAParams() 6 # 創(chuàng)建一個PDF頁面聚合對象 7 device = PDFPageAggregator(rsrcmgr, laparams=laparams) 8 interpreter = PDFPageInterpreter(rsrcmgr, device) 9 for page in PDFPage.create_pages(document):10     interpreter.process_page(page)11     # 接收該頁面的LTPage對象12     layout = device.get_result()

 

布局分析返回的PDF文檔中的每個頁面LTPage對象。這個對象和頁內(nèi)包含的子對象,形成一個樹結(jié)構(gòu)

如圖所示:

http://www.unixuser.org/~euske/python/pdfminer/layout.png

  • LTPage :表示整個頁。可能會含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子對象。
  • LTTextBox:表示一組文本塊可能包含在一個矩形區(qū)域。注意此box是由幾何分析中創(chuàng)建,并且不一定
    表示該文本的一個邏輯邊界。它包含LTTextLine對象的列表。使用 get_text()方法返回的文本內(nèi)容。
  • LTTextLine :包含表示單個文本行LTChar對象的列表。字符對齊要么??水平或垂直,取決于文本的寫入模式。
    get_text()方法返回的文本內(nèi)容。
  • LTChar
  • LTAnno:在文本中實際的字母表示為Unicode字符串(?)。需要注意的是,雖然一個LTChar對象具有實際邊界,
    LTAnno對象沒有,因為這些是“虛擬”的字符,根據(jù)兩個字符間的關(guān)系(例如,一個空格)由布局分析后插入。
  • LTImage:表示一個圖像對象。嵌入式圖像可以是JPEG或其它格式,但是目前PDFMiner沒有放置太多精力在圖形對象。
  • LTLine:代表一條直線。可用于分離文本或附圖。
  • LTRect:表示矩形。可用于框架的另一圖片或數(shù)字。
  • LTCurve:表示一個通用的Bezier曲線

4.2.3獲得目錄(綱要)

 1 from pdfminer.pdfparser import PDFParser 2 from pdfminer.pdfdocument import PDFDocument 3  4 # Open a PDF document. 5 fp = open('mypdf.pdf', 'rb') 6 parser = PDFParser(fp) 7 document = PDFDocument(parser, password) 8  9 # Get the outlines of the document.10 outlines = document.get_outlines()11 for (level,title,dest,a,se) in outlines:12     print (level, title)

 

5.個人使用

 1 # -*- coding: utf-8 -*-    2 from pdfminer.pdfparser import PDFParser 3 from pdfminer.pdfdocument import PDFDocument 4 from pdfminer.pdfpage import PDFPage 5 from pdfminer.pdfpage import PDFTextExtractionNotAllowed 6 from pdfminer.pdfinterp import PDFResourceManager 7 from pdfminer.pdfinterp import PDFPageInterpreter 8 from pdfminer.pdfdevice import PDFDevice 9 from pdfminer.layout import *10 from pdfminer.converter import PDFPageAggregator11 import os12 os.chdir(r'F:/test')13 fp = open('python.pdf', 'rb')14 #來創(chuàng)建一個pdf文檔分析器15 parser = PDFParser(fp)  16 #創(chuàng)建一個PDF文檔對象存儲文檔結(jié)構(gòu)17 document = PDFDocument(parser)18 # 檢查文件是否允許文本提取19 if not document.is_extractable:20     raise PDFTextExtractionNotAllowed21 else:22     # 創(chuàng)建一個PDF資源管理器對象來存儲共賞資源23     rsrcmgr=PDFResourceManager()24     # 設(shè)定參數(shù)進(jìn)行分析25     laparams=LAParams()26     # 創(chuàng)建一個PDF設(shè)備對象27     # device=PDFDevice(rsrcmgr)28     device=PDFPageAggregator(rsrcmgr,laparams=laparams)29     # 創(chuàng)建一個PDF解釋器對象30     interpreter=PDFPageInterpreter(rsrcmgr,device)31     # 處理每一頁32     for page in PDFPage.create_pages(document):33         interpreter.process_page(page)34         # 接受該頁面的LTPage對象35         layout=device.get_result()36         for x in layout:37             if(isinstance(x,LTTextBoxHorizontal)):38                 with open('a.txt','a') as f:39                     f.write(x.get_text().encode('utf-8')+'/n')

 

將書中的文本內(nèi)容得到了,只是簡單的使用,官方文檔中講解的很全面,在此只是做個小總結(jié)。

注:轉(zhuǎn)載請注明出處

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 湘潭市| 遂平县| 泾川县| 柳河县| 朔州市| 武川县| 土默特右旗| 玉门市| 余干县| 乌兰察布市| 凌海市| 皋兰县| 连州市| 绥芬河市| 古浪县| 吉林市| 灵山县| 抚顺市| 蒲江县| 虹口区| 且末县| 通许县| 康保县| 金湖县| 通城县| 武宣县| 六盘水市| 洱源县| 石狮市| 油尖旺区| 扶风县| 南充市| 南京市| 县级市| 五指山市| 巴塘县| 仪陇县| 阳原县| 西畴县| 长寿区| 大厂|