web-dev-qa-db-ja.com

Pythonを使用してPDFからテーブルをテキストとして抽出する方法は?

テーブル、テキスト、いくつかの画像を含むPDFがあります。 PDF内のテーブルがある場所ならどこでもテーブルを抽出したい。

現在、ページからテーブルを見つけるために手動で行っています。そこから、そのページをキャプチャして別のPDFに保存しています。

import PyPDF2

PDFfilename = "Sammamish.pdf" #filename of your PDF/directory where your PDF is stored

pfr = PyPDF2.PdfFileReader(open(PDFfilename, "rb")) #PdfFileReader object

pg4 = pfr.getPage(126) #extract pg 127

writer = PyPDF2.PdfFileWriter() #create PdfFileWriter object
#add pages
writer.addPage(pg4)

NewPDFfilename = "allTables.pdf" #filename of your PDF/directory where you want your new PDF to be
with open(NewPDFfilename, "wb") as outputStream:
    writer.write(outputStream) #write pages to new PDF

私の目標は、PDFドキュメント全体からテーブルを抽出することです。

Please have a look at the sample image of a page in PDF

26
venkat

私の意見では、4つの可能性があります:

  • pdfを直接扱うtabula を使用して

  • pdftotextを使用してpdfをテキストに変換してから、pythonでテキストを解析できます

  • 外部ツールを使用してpdfファイルをExcelまたはcsvに変換し、必要なpythonモジュールを使用してExcel/csvファイルを開くことができます。

  • pdfを画像ファイルに変換してから、最新のOCRソフトウェア(画像からテーブルを自動的に再構築)を使用してデータを取得することもできます。

あなたの質問は次のものとほぼ同じです:

よろしく

39
A STEFANI

表を使用してテーブルを抽出することをお勧めします。 PDFを引数としてTabula APIに渡すと、データフレームの形式でテーブルが返されます。 PDFの各テーブルは、1つのデータフレームとして返されます。これはpdfを抽出するための私のコードです。

#the table will be returned in a list of dataframe,for working with dataframe you need pandas
import pandas as pd
import tabula
file = "filename.pdf"
path = 'enter your directory path here'  + file
df = tabula.read_pdf(path, pages = '1', multiple_tables = True)
print(df)

詳細については、こちらの repo を参照してください。

10
Himanshu Poddar

「python extract pdf table」を検索するたびにここに常に指示されるため、質問に対する2019更新

Camelot/excaliburというpythonソリューションがあります

https://github.com/atlanhq/camelot

3
josem8f

開発者のほとんどのニーズでAIとAPIが技術を支配しているため、ここ2019年には、 https://extracttable.com 、AIを活用したい場合があります(列の指定やルールの作成について心配する必要はありません) )、主にAPI経由の画像またはPDFで表形式の構造を検出します。これは表形式のJSON応答を返し、より詳細に制御できます。

また、同社は https://github.com/ExtractTable/camelotpro を維持しています。これは、テキストPDFだけでなく画像からもテーブルを抽出する有名なオープンソースライブラリであるcamelot-pyのラッパーです。

0
Saradhi