簡體   English   中英

從pdf中提取數據的最佳方法是什么

[英]what is the best way to extract data from pdf

我有數千個 pdf 文件需要從中提取數據。這是一個示例pdf 我想從示例 pdf 中提取此信息。

在此處輸入圖片說明

我對 nodejs、python 或任何其他有效方法持開放態度。 我對python和nodejs知之甚少。 我嘗試在此代碼中使用 python

 import PyPDF2 try: pdfFileObj = open('test.pdf', 'rb') pdfReader = PyPDF2.PdfFileReader(pdfFileObj) pageNumber = pdfReader.numPages page = pdfReader.getPage(0) print(pageNumber) pagecontent = page.extractText() print(pagecontent) except Exception as e: print(e)

但我被困在如何找到采購歷史上。 從pdf中提取采購歷史的最佳方法是什么?

很久以前我做過類似的事情來我的成績。 我發現的最簡單(不漂亮)的解決方案是將 pdf 轉換為 html,然后解析 html。

為此,我使用了 pdf2text/pdf2html ( https://pypi.org/project/pdf-tools/ ) 和 html。
我也使用了編解碼器,但不記得這背后的確切原因。

一個快速而骯臟的總結:

from lxml import html
import codecs
import os

# First convert the pdf to text/html
# You can skip this step if you already did it
os.system("pdf2txt -o file.html file.pdf")
# Open the file and read it
file = codecs.open("file.html", "r", "utf-8")
data = file.read()
# We know we're dealing with html, let's load it
html_file = html.fromstring(data)
# As it's an html object, we can use xpath to get the data we need
# In the following I get the text from <div><span>MY TEXT</span><div>
extracted_data = html_file.xpath('//div//span/text()')
# It returns an array of elements, let's process it
for elm in extracted_data:
    # Do things
file.close()

只需檢查 pdf2text 或 pdf2html 的結果,然后使用 xpath 您應該可以輕松提取您的信息。

我希望它有幫助!

編輯:注釋代碼

EDIT2:以下代碼正在打印您的數據

# Assuming you're only giving the page 4 of your document
# os.system("pdf2html test-page4.pdf > test-page4.html")

from lxml import html
import codecs
import os

file = codecs.open("test-page4.html", "r", "utf-8")
data = file.read()
html_file = html.fromstring(data)
# I updated xpath to your need
extracted_data = html_file.xpath('//div//p//span/text()')
for elm in extracted_data:
    line_elements = elm.split()
    # Just observed that what you need starts with a number
    if len(line_elements) > 0 and line_elements[0].isdigit():
        print(line_elements)
file.close();

pdfplumber是最好的選擇。 [ 參考]

安裝

pip install pdfplumber

提取所有文本

import pdfplumber
path = 'path_to_pdf.pdf'
with pdfplumber.open(path) as pdf:
    for  page  in pdf.pages:
        print(page.extract_text())

好的。 我幫助開發來自 opait.com 的這個商業產品。 我接受了您輸入的 PDF 並在其中划分了幾個區域,如下所示:

在此處輸入圖片說明

還有你的桌子:

在此處輸入圖片說明

在大約 2 分鍾內,我可以從這個和 1000 個類似的文檔中提取出來。 請注意,此圖像是日志視圖並將該數據導出為 CSV。 所有藍色“鏈接”都是提取的實際數據並實際鏈接回 PDF,因此您可以查看來自何處。 輸出也可以是 XML 或 JSON 或其他格式。 您在該屏幕截圖中看到的是日志視圖,所有這些都是 CSV 格式(一個用於主要屬性,另一個用於通過記錄 ID 鏈接的每個表,如果您的 PDF 在一個 PDF 中包含 1000 個這些文檔) .

同樣,我幫助開發此產品,但您可以完成您的要求。 我提取了您的整個表格以及所有其他重要的字段。

在此處輸入圖片說明

PDFTron ,我工作的公司有一個全自動的 PDF 到 HTML 輸出解決方案。

您可以在此處在線試用。 https://www.pdftron.com/pdf-tools/pdf-table-extraction

這是您提供的文件的 HTML 輸出的屏幕截圖。 輸出既包含 HTML 表格,也包含兩者之間的可重排文本內容。

在此處輸入圖片說明

輸出是標准的 XML HTML,因此您可以輕松解析/操作 HTML 表。

我為制作 PDFTables 的公司工作。 PDFTables API 將幫助您解決這個問題,並一次轉換所有 PDF。 它是一個簡單的基於 Web 的 API,因此可以從任何編程語言中調用。 您需要在 PDFTables.com 上創建一個帳戶,然后使用此處示例語言之一的腳本: https ://pdftables.com/pdf-to-excel-api。 這是一個使用 Python 的示例:

import pdftables_api
import os

c = pdftables_api.Client('MY-API-KEY')

file_path = "C:\\Users\\MyName\\Documents\\PDFTablesCode\\"

for file in os.listdir(file_path):
    if file.endswith(".pdf"):
        c.xlsx(os.path.join(file_path,file), file+'.xlsx')

該腳本在文件夾中查找擴展名為“.pdf”的所有文件,然后將每個文件轉換為 XLSX 格式。 您可以將格式更改為“.csv”、“.html”或“.xml”。 前 75 頁是免費的。

這是 IntelliGet 中的四行腳本

{ start = IsSubstring("CAGE   Contract Number",Line(-2));  
  end = IsEqual(0, Length(Line(1)));
  { start = 1;
    output = Line(0);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM