<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PDF文件信息不會提取怎么辦??別急!Python幫你解決

          共 3318字,需瀏覽 7分鐘

           ·

          2020-09-23 01:10

          點擊上方數(shù)據(jù)管道”,選擇“置頂星標”公眾號

          干貨福利,第一時間送達


          01. 引言

          在大多數(shù)常規(guī)數(shù)據(jù)文件中,pdf文件因其特殊的性質導致對其信息進行智能解析、提取、甚至批量化處理造成一定的困難,本期推文就教你如何使用Python第三方庫pdfplumber (https://github.com/jsvine/pdfplumber) 對pdf文件進行解析及提取。

          02. pdfplumber簡介及安裝

          Pdfplumber是一個可以處理pdf文件格式信息的python第三方庫??梢圆檎谊P于每個文本字符、矩陣、和行的詳細信息,也可以對表格進行提取并進行可視化展示調(diào)試??芍苯硬捎胮ip 進行安裝,在命令行中輸入:
          pip install pdfplumber

          但鑒于國內(nèi)網(wǎng)有時下載巨慢,建議使用清華鏡像進行安裝,具體方法可自行百度。


          03. pdf文件主要信息(表格+文本)提取

          具體的屬性及基本使用方法大家都可以去官網(wǎng)自己查看,這里僅介紹常用信息(表格+文本)的提取方法,文件也是使用官網(wǎng)提供的。


          1)表格信息提取


          表格提取方法主要包括find_tables()、extract_tables()、extract_table()以及debug_tablefinder()。我們提取表格信息主要使用extract_tables()、extract_table() 方法,而debug_tablefinder() 則是查看表格信息提取的依據(jù)。官網(wǎng)解釋如下:



          接下來,我們使用extract_table()結合具體的pdf文件進行介紹說明。Pdf文件信息如下(部分):



          提取數(shù)據(jù):

          import?pandas?as?pdimport?pdfplumberpdf?=?r"pdfplumber-stable\examples\pdfs\ca-warn-report.pdf"ta_pdf?=?pdfplumber.open(pdf)ta_pdf_info?=?ta_pdf.pages[0]?#獲取pdf文件第一頁信息tables?=?ta_pdf_info.extract_table()?#獲取表格信息tabes[:3]


          結果顯示如下:


          使用.extract_table從頁面上最大的表中獲取數(shù)據(jù):.extract_table返回一個鑲嵌列表,每個內(nèi)部列表為表中的一行,對比pdf文件可以發(fā)現(xiàn),主要的信息我們已經(jīng)提取出來,接下來我們對信息進行保存。

          信息保存:

          table_df = pd.DataFrame(tables[1:],columns=tables[0])table_df.head()

          結果如下:



          這樣我們就完美的提取pdf第一頁表格信息了,可以發(fā)現(xiàn),Effective和Received列由于是直接提取,導致文本之間存在空格,接下來整理下即可,代碼如下:

          for?column?in?["Effective",?"Received"]:????table_df[column]?=?table_df[column].str.replace("?",?"")table_df.head()

          結果如下:



          通過pandas的to_excel等文件保存方法即可實現(xiàn)文件另存。到此,我們就實現(xiàn)了pdf第一頁表格信息的提取、整理和另存。若想對多頁進行批量處理,進行簡單的循環(huán)處理即可。


          此外,我們還可以直接通過 within_bbox()方法直接定位我們需要提取信息的位置進行特定位置信息的提取。within_bbox() 介紹如下:




          (2)文本信息提取


          文本信息的提取主要使用extract_text()方法,這里使用的pdf文件預覽如下(部分):



          提取文本信息代碼如下:

          file = r"pdfplumber-stable\examples\pdfs\san-jose-pd-firearm-sample.pdf"text_pdf?=?pdfplumber.open(file)text_info?=?text_pdf.pages[0]text?=?text_info.extract_text()print(text)

          結果為:


          對比pdf可知,文本信息已全部提出。這里我們就可以使用正則表達式對提取信息進行篩選。代碼如下:


          core_part = re.compile(r"LOCATION[\-\s]+(.*)\n\s+Flags = e", re.DOTALL)core?=?re.search(core_part,?text).group(1)print(core)

          這里解釋下:LOCATION[\-\s]+(.*)\n\s+Flags = e 就是匹配 LOCATION 和 Flags = e 字符串 之間的所有元素,無論換行還是空格等。結果如下:



          由于使用print()方法進行輸出,結果較為規(guī)范,但實際情況如下:



          含有多個換行符號(\n),接下來以此為依據(jù)進行拆分(split),如下:



          再對結果進行提取,代碼如下:

          line_groups = list(zip(lines[::2], lines[1::2]))line_groups


          結果如下:



          最后使用collections模塊中的OrderedDict類 進行字典有序排列,構建pandas需數(shù)據(jù),具體代碼如下:

          from?collections?import?OrderedDictline_groups?=?list(zip(lines[::2],?lines[1::2]))def?parse_row(first_line,?second_line):????return?OrderedDict([????????("type",?first_line[:20].strip()),????????("item",?first_line[21:41].strip()),????????("make",?first_line[44:89].strip()),????????("model",?first_line[90:105].strip()),????????("calibre",?first_line[106:111].strip()),????????("status",?first_line[112:120].strip()),????????("flags",?first_line[124:129].strip()),????????("serial_number",?second_line[0:13].strip()),????????("report_tag_number",?second_line[21:41].strip()),????????("case_file_number",?second_line[44:64].strip()),????????("storage_location",?second_line[68:91].strip())????])parsed?=?[?parse_row(first_line,?second_line)????for?first_line,?second_line?in?line_groups?]parsed[:2]


          結果如下:


          可以看出,數(shù)據(jù)已經(jīng)過整合并符合pandas 構建數(shù)據(jù)DataFrame形式。如下:

          text_df?=?pd.DataFrame(parsed)text_df

          結果如下(部分):


          通過to_excel等方法即可實現(xiàn)另存。

          04. 總結

          本期推文簡單介紹了如何使用Python第三方庫pdfplumber 實現(xiàn)對pdf文件解析及基本信息提取。其目的是為大家提供一個數(shù)據(jù)解決思路,這里只是簡單介紹表格信息和文本信息的提取,其他的方法,大家可以查看官網(wǎng)獲取啊。

          瀏覽 96
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  狼人国产香蕉在线 | 99在线资源 | 柏欣彤Av色福利一二区 | 国产精品成人久久久久 | 久草资源在线观看 |