1. Python提取PDF表格及文本!

        共 3981字,需瀏覽 8分鐘

         ·

        2021-03-02 12:27

        作者 | 朱衛(wèi)軍
        來源 | Python大數(shù)據(jù)分析


        pdf是一種便攜式文檔格式,由Adobe公司設(shè)計。因為不受平臺限制,且方便保存和傳輸,所以pdf非常受歡迎。

        目前市場上有很多pdf工具,大部分是閱讀類,也有支持對pdf的修改、轉(zhuǎn)換等功能,但這部分工具不少是收費的。但是如果要批量對pdf修改的話還是用代碼實現(xiàn)會比較好!

        這次介紹一個開源python工具庫-pdfplumber,可以方便地獲取pdf的各種信息,包括文本、表格、圖表、尺寸等。

        pdfplumber在github上有英文官方文檔,后面我們會撿重點講解,先看下如何用pdfplumber提取pdf表格?

        以NBA 2020-2021 常規(guī)賽數(shù)據(jù)作為范例,pdf表格如下:

        第一步:使用pdfplumber提取表格文本

        # 導(dǎo)入pdfplumber
        import pdfplumber

        # 讀取pdf文件,保存為pdf實例
        pdf =  pdfplumber.open("E:\\nba.pdf"

        # 訪問第二頁
        first_page = pdf.pages[1]

        # 自動讀取表格信息,返回列表
        table = first_page.extract_table()

        table

        輸出:

        第二步:整理成dataframe格式,保存為excel

        import pandas as pd

        # 將列表轉(zhuǎn)為df
        table_df = pd.DataFrame(table_2[1:],columns=table_2[0])

        # 保存excel
        table_df.to_excel('test.xlsx')

        table_df

        輸出:

        一個小小的腳本,不到十行代碼,便將pdf表格提取并轉(zhuǎn)化為dataframe格式,最終保存到excel。

        有個初步認知后,接下來詳細講講pdfplumber的安裝、導(dǎo)入、api接口等信息。

        pdfplumber簡介

        前面已經(jīng)介紹過pdfplumber的用途,也用一個小案例展示了如何提取表格,我覺得對于pdfplumber只需要了解三點就可以。

        1、它是一個純python第三方庫,適合python 3.x版本

        2、它用來查看pdf各類信息,能有效提取文本、表格

        3、它不支持修改或生成pdf,也不支持對pdf掃描件的處理

        Github地址https://github.com/jsvine/pdfplumber

        pdfplumber安裝和導(dǎo)入

        同其他python庫一樣,pdfplumber支持使用pip安裝,在命令行輸入:

        pip install pdfplumber

        如果遇到安裝慢的問題,可以替換鏡像源,會快很多。

        pdfplumber安裝后,用import導(dǎo)入即可使用:

        import pdfplumber
        ....

        pdfplumber簡單使用

        pdfplumber中有兩個基礎(chǔ)類,PDF和Page??醋置嬉馑寄懿鲁觯罢呤翘幚碚麄€文檔,后者是處理頁面。

        「pdfplumber.PDF類」

        屬性描述
        .metadata獲取pdf基礎(chǔ)信息,返回字典
        .pages一個包含pdfplumber.Page實例的列表,每一個實例代表pdf每一頁的信息。

        「pdfplumber.Page類」

        這是pdfplumber的核心功能,對pdf的大部分操作都是基于這個類,包括提取文本、表格、尺寸等。

        這里暫不一一列舉它的屬性和方法。

        通過一個簡單的案例,就可以明白它們的作用。示例pdf文檔,共兩頁:

        1. 讀取pdf
        # 導(dǎo)入pdfplumber
        import pdfplumber

        # 讀取pdf文件,返回pdfplumber.PDF類的實例
        pdf = pdfplumber.open("e:\\nba2.pdf")
        1. 獲取該pdf文檔的信息
        # 通過pdfplumber.PDF類的metadata屬性獲取pdf信息
        pdf.metadata

        輸出:

        這些是pdf的基礎(chǔ)信息,包括作者、來源、日期等。

        1. 總頁數(shù)
        # 通過pdfplumber.PDF類的metadata屬性獲取pdf頁數(shù)
        len(pdf.pages)
        1. 讀取第一頁的頁寬、頁高等信息
        # 第一頁pdfplumber.Page實例
        first_page = pdf.pages[0]

        # 查看頁碼
        print('頁碼:',first_page.page_number)

        # 查看頁寬
        print('頁寬:'first_page.width)

        # 查看頁高
        print('頁高:'first_page.height)

        輸出:

        1. 讀取第一頁的文本
        # 讀取文本
        text = first_page.extract_text()
        print(text)

        輸出:

        1. 讀取第二頁的表格
        import pandas as pd

        # 第二頁pdfplumber.Page實例
        first_page = pdf.pages[1]

        # 自動讀取表格信息,返回列表
        table = first_page.extract_tables()

        # 將列表轉(zhuǎn)為df
        table_df = pd.DataFrame(table_2[1:],columns=table_2[0])

        table_df

        pdfplumber提取表格有很多的細節(jié)需要處理,這里給到的范例表格線框比較規(guī)范,所以能很簡單的提取,但對于線框不完全(包含無線框)的表格,其效果就差了不少。

        在實際項目所需處理的pdf文檔中,線框完全及不完全的表格都比較多,為了能夠理解pdfplumber實現(xiàn)表格抽取的原理和方法,我們需要去細究相關(guān)參數(shù)的設(shè)置。

        正如案例所示,pdfplumber.Page對象的.extract_table()方法可以提取表格,返回從頁面上最大的表中提取的文本,以列表列表的形式顯示,結(jié)構(gòu)為row -> cell。

        「表格抽取參數(shù)設(shè)置」

        默認情況下,extract_table使用頁面的垂直和水平線(或矩形邊緣)作為單元格分隔符。該方法可以通過table_settings參數(shù)進行高度自定義??赡艿脑O(shè)置及其默認值:

        {
            "vertical_strategy""lines"
            "horizontal_strategy""lines",
            "explicit_vertical_lines": [],
            "explicit_horizontal_lines": [],
            "snap_tolerance": 3,
            "join_tolerance": 3,
            "edge_min_length": 3,
            "min_words_vertical": 3,
            "min_words_horizontal": 1,
            "keep_blank_chars": False,
            "text_tolerance": 3,
            "text_x_tolerance": None,
            "text_y_tolerance": None,
            "intersection_tolerance": 3,
            "intersection_x_tolerance": None,
            "intersection_y_tolerance": None,
        }

        pdfplumber支持對圖表進行可視化調(diào)試,能輸出圖像,顯示如何提取表。

        pdfplumber的獨特之處

        python中有很多庫可以處理pdf,比如PyPDF2、pdfminer等,那pdfplumber的優(yōu)勢在哪呢?

        首先,pdfplumber能輕松訪問有關(guān)PDF對象的所有詳細信息,且用于提取文本和表格的方法高級可定制,使用者可根據(jù)表格的具體形式來調(diào)整參數(shù)。

        最關(guān)鍵的是pdfplumber作者持續(xù)在維護該庫,而同樣受歡迎的PyPDF2已經(jīng)不再維護了。

        源碼:https://pan.baidu.com/s/1LYlypuwGRTrgBU6Gynl3rA 提取碼:4f9n

        瀏覽 76
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 色色五月丁香 | 另类 综合 日韩 欧美 亚洲 | chineseav在线 | 奶水旺盛的少妇 | 奇米影视无码不卡在线视频 |