質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%

Q&A

解決済

1回答

1645閲覧

表形式のpdfをテキスト化

kentaronagata

総合スコア25

0グッド

2クリップ

投稿2023/01/05 15:15

前提

pythonでスクレイピングによってサイトから持ってきたpdfの表形式をテキスト化しエクセルに出力を自動で行うシステムを作成しています。

発生している問題・エラーメッセージ

以下のコードを実行すると

dfs = tabula.read_pdf(f"/Users/kentaro/Desktop/PYTHONSYSTEM/圭吾案件/JAPANESEYENTIBOR230105.pdf",lattice=False,pages='all') print(dfs) for df in dfs: # カラム名の名前を付ける df["Tibor"] = df["1WEEK"] * 1000 df=df.rename(columns={"Unnamed: 0":"日付"}) print(df)

以下のエラーコードが出ました。

エラーメッセージ name 'df' is not defined

試したこと

pdfのデータがその月の初旬だとデータが少ないせいかうまく読み込めません。
JAPANESEYENTIBOR230105.pdfではなく下旬あたりの221227などの下旬あたりのデータを持ってくるとデータもしっかりあるためか上記のエラーは出ずにしっかり読み込むことができました。

初旬のデータで試したことは、read_pdfのパラメータlatticeをstreamに変えるなどして試したのですがうまくいきませんでした。

以下に扱ったpdfの写真を共有します。
イメージ説明

↑テキストかできなかったpdf

イメージ説明
↑テキスト化できたpdf
何かいい方法があれば教えていただきたいです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

camelotだとうまく取得できそうです。
表の範囲や列位置などいろいろ調整して取得できます。
詳細はAdvanced Usageを参照ください。

Python

1import camelot 2import matplotlib.pyplot as plt 3 4path = 'JAPANESEYENTIBOR230105.pdf' 5#path = 'JAPANESEYEN20142.pdf' 6 7table_areas = ['0,500,800,0'] 8columns = ['105,160,215,270,325,380,430,485,540,595,645,700,750'] 9tables = camelot.read_pdf(path, flavor='stream', table_areas=table_areas, columns=columns, split_text=True) 10 11if len(tables): 12 tbl = tables[0] 13 print(tbl.df) 14 print(tbl.df.to_markdown()) 15 #fig = camelot.plot(tbl, kind='textedge') 16 #plt.show()
012345678910111213
01WEEK1MONTH2MONTH3MONTH4MONTH5MONTH6MONTH7MONTH8MONTH9MONTH10MONTH11MONTH12MONTH
12023/01/05-0.045450.068180.063640.138180.20545
22023/01/04-0.045450.068180.063640.143640.20273

投稿2023/01/06 02:32

can110

総合スコア38352

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kentaronagata

2023/01/06 11:54

ありがとうございます! 試しにやってみます!
kentaronagata

2023/01/06 12:31

camelot.read_pdfがうまいこといかなくて、module 'camelot' has no attribute 'read_pdf'といったエラーが出たのですがわかりますでしょうか? 色々と聞いてすみませんが、よろしくお願い致します。
can110

2023/01/08 03:52

よくあるのはご自身が書いた.pyファイル名がモジュール名と同じ「camelot.py」になっているとかでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問