最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python如何讀取PDF文檔(或TXT)

 更新時間:2022年12月01日 10:54:42   作者:愛編程的喵汪人  
這篇文章主要介紹了Python如何讀取PDF文檔(或TXT),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

如何讀取PDF文檔(或TXT)

字符串在Python內部的表示是Unicode編碼,首先我們來認識Python中encode()和decode()的作用與區(qū)別:

在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

  • decode的作用是將其他編碼的字符轉換成unicode編碼,如str1,decode(‘gb2312’),表示將gb2312編碼的字符串str1轉換成unicode編碼。
  • encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2,encode(‘gb2312’),表示將unicode編碼的字符串str2轉換成gb2312編碼。

常見文檔讀取有:

  • TXT
  • PDF

其中TXT文檔的讀取較為簡單,爬取網(wǎng)頁數(shù)據(jù)時注意read()的編碼設置即可

我們主要來介紹使用pdfminer3k模塊讀取PDF

文檔PDF的Python讀取

——英文PDF文件支持最好且只支持英文PDF是pyPDF2庫

——而對于多語言PDF文件支持最好的則是pdfminer,我們這里就使用pdfminer3k庫來實現(xiàn)讀取PDF。

1. 安裝pdfminer3k:

——pip install pdfminer3k

——python setup.py install`在這里插入代碼片`

2. 驗證安裝pdfminer3k是否成功:

在cmd下,進入tools目錄下( cd ~/Downloads/pdfminer3k-1.3.1/tools)后使用命令 ——python3 pdf2txt.py ../samples/simple1.pdf        #..是退回上一層目錄的意思

3. Python讀取PDF文檔:

pdfminer3k中類的關系:

讀取流程

——打開pdf文檔的文件對象:

fp = open("naacl06-shinyama.pdf", 'rb')     #本地文檔
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')   #在線pdf

——創(chuàng)建文檔分析器(解析器):

pdf_parser = PDFParser(fp)       #傳入pdf,從中獲取數(shù)據(jù) 

——創(chuàng)建文檔對象,保存獲取的數(shù)據(jù):

pdf_doc = PDFDocument()     #保存獲取的數(shù)據(jù),和PDFParser是相互關聯(lián)的 

——連接分析器和文檔對象:

pdf_parser.set_document(doc)          
doc.set_parser(pdf_parser)       

——判斷文件是否允許文本提取:

 if not doc.is_extractable:
     raise PDFTextExtractionNotAllowed     #raise如果拋出異常,后續(xù)語句不執(zhí)行

——對文檔對象提供密碼(password)初始化,沒有就不用傳該參數(shù):

doc.initialize("")        

——創(chuàng)建資源管理器:

resource = PDFResourceManager()      #用于存儲共享資源,如字體或圖像

——創(chuàng)建參數(shù)分析器:

laparam = LAParams()

——創(chuàng)建一個頁面聚合器對象:

device = PDFPageAggregator(resource, laparams=laparam)

——創(chuàng)建一個頁面解析器對象來處理頁面內容:

interpreter = PDFPageInterpreter(resource, device)     #傳入的是頁面資源和聚合器對象

——獲取page列表:

 doc.get_pages() 

——使用頁面解釋器來讀?。?/p>

interpreter.process_page(page)

——使用頁面聚合器獲得內容:

layout = device.get_result()       #這里layout是一個LTPage對象 里面存放著 這個page解析出的各種對象

——循環(huán)遍歷取出聚合器獲得的對象內容:

for out in layout:       
        if hasattr(out, 'get_text'):              #判斷out對象是否具有get_text方法
            print(out.get_text())                 #輸出out對象

Layout布局分析返回的PDF文檔中的每個頁面LTPage對象。

這個對象和頁內包含的子對象,形成一個樹結構。

如圖所示:

樹結構節(jié)點含義:

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

讀取PDF文檔完整實例

from urllib.request import urlopen
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
 
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
 
#獲取文檔
#fp = open("naacl06-shinyama.pdf", 'rb')    
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')
 
#創(chuàng)建解釋器
pdf_parser = PDFParser(fp)
 
#PDF文檔對象
doc = PDFDocument()
 
#連接解釋器和文檔對象
parser.set_document(doc)
doc.set_parser(parser)
 
#初始化文檔
doc.initialize()
 
#創(chuàng)建PDF資源管理器
resource = PDFResourceManager()
 
# 創(chuàng)建一個PDF參數(shù)分析器
laparam = LAParams()
 
# 創(chuàng)建聚合器
device = PDFPageAggregator(resource, laparams=laparam)
 
#創(chuàng)建PDF頁面解析器
interpreter = PDFPageInterpreter(resource, device)
 
# 循環(huán)遍歷列表,每次處理一頁的內容
# doc.get_pages() 獲取page列表

for page in doc.get_pages():
    #使用頁面解釋器來讀取
    interpreter.process_page(page)
    #使用聚合器獲得內容
    layout = device.get_result()
    for out in layout:       
        if hasattr(out, 'get_text'):
            print(out.get_text())

總結

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

最新評論

永安市| 荣成市| 交口县| 松江区| 沙洋县| 石屏县| 综艺| 大姚县| 团风县| 夏邑县| 松滋市| 鄢陵县| 秭归县| 永安市| 伊川县| 长宁县| 新津县| 四平市| 措美县| 林口县| 丹巴县| 东至县| 云林县| 巧家县| 肇源县| 荥经县| 历史| 九龙城区| 南木林县| 南通市| 彝良县| 阳高县| 日喀则市| 溧阳市| 秭归县| 隆子县| 呼伦贝尔市| 新余市| 漾濞| 鄂伦春自治旗| 卫辉市|