テーブル、テキスト、いくつかの画像を含む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ドキュメント全体からテーブルを抽出することです。
私の意見では、4つの可能性があります:
pdfを直接扱うtabula を使用して
pdftotextを使用してpdfをテキストに変換してから、pythonでテキストを解析できます
外部ツールを使用してpdfファイルをExcelまたはcsvに変換し、必要なpythonモジュールを使用してExcel/csvファイルを開くことができます。
pdfを画像ファイルに変換してから、最新のOCRソフトウェア(画像からテーブルを自動的に再構築)を使用してデータを取得することもできます。
あなたの質問は次のものとほぼ同じです:
よろしく
表を使用してテーブルを抽出することをお勧めします。 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 を参照してください。
「python extract pdf table」を検索するたびにここに常に指示されるため、質問に対する2019更新
Camelot/excaliburというpythonソリューションがあります
開発者のほとんどのニーズでAIとAPIが技術を支配しているため、ここ2019年には、 https://extracttable.com 、AIを活用したい場合があります(列の指定やルールの作成について心配する必要はありません) )、主にAPI経由の画像またはPDFで表形式の構造を検出します。これは表形式のJSON応答を返し、より詳細に制御できます。
また、同社は https://github.com/ExtractTable/camelotpro を維持しています。これは、テキストPDFだけでなく画像からもテーブルを抽出する有名なオープンソースライブラリであるcamelot-pyのラッパーです。