PDFをLLMで解析する前処理のパーサーは何が良いのか？（pdfminer, PyMuPDF, pypdf, Unstructured）

現状の LLM は PDF ファイルを直接処理出来ない為、予めなんらかのプレーンテキスト形式に変換する必要があります。
（PDFを読める各チャットアプリも内部的には何らかの手段でプレーンテキスト形式に変換しているはずです）

変換を行ってくれるライブラリは複数存在する為、動作の違いを確認します。

:::note
Markdown形式に変換する方法は以下
https://qiita.com/cyberBOSE/items/c276d273bfc20881adfc
:::

:::note
HTML形式に変換する方法は以下
https://qiita.com/cyberBOSE/items/f69caa3a3a8278905b0b
:::

# 抽出プログラム

抽出する対象のPDFファイルは<a href="https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bedrock-ug.pdf">Bedrockユーザーガイドの日本語版</a>を使います。

```Python:pdfminer
from pdfminer.high_level import extract_text
from pathlib import Path

pdf = Path('bedrock-ug.pdf')

with open("use_pdfminer.txt", "w", encoding="utf-8") as out:
    out.write(extract_text(pdf))
```
```Python:PyMuPDF
import fitz

with fitz.open("bedrock-ug.pdf") as pdf:
    with open("use_PyMuPDF.txt", "w", encoding="utf-8") as out:
        for page in pdf:
            out.write(page.get_text() + "\n")
```
```Python:pypdf
from pypdf import PdfReader

pdf = PdfReader('bedrock-ug.pdf')
number_of_pages = len(pdf.pages)

with open("use_pypdf.txt", "w", encoding="utf-8") as out:
    for page in range(number_of_pages):
        out.write(pdf.pages[page].extract_text() + "\n")
```
```Python:Unstructured
from unstructured.partition.pdf import partition_pdf

pdf = partition_pdf("bedrock-ug.pdf")

with open("use_unstructured.txt", "w", encoding="utf-8") as out:
    for structure in pdf:
        out.write(str(structure)+"\n")
```
各ライブラリはもっと細かく指定できるような気がしますが、とりあえずシンプルに抽出のみ行ってみます。これをもって各ライブラリの優劣を判断するわけではありません。

# 違いの確認

### 先頭から目次の手前まで

さっそく違いが出ています。

```:pdfminer
ユーザーガイド

Amazon Bedrock

Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon Bedrock

ユーザーガイド

Amazon Bedrock: ユーザーガイド

Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon の商標およびトレードドレスは、お客様に混乱を招く可能性がある態様、または Amazon 

の信用を傷つけたり、失わせたりする態様において、Amazon のものではない製品またはサービスに

関連して使用してはなりません。Amazon が所有しない他の商標はすべてそれぞれの所有者に帰属し

ます。所有者は必ずしも Amazon との提携や関連があるわけではありません。また、Amazon の支

援を受けているとはかぎりません。


Amazon Bedrock

Table of Contents

ユーザーガイド
```
pdfminerはまず間に空行がはいるのと、最後の部分はPDFの順序と異なる順序で出力されています。
あとブラウザだと分からないかもしれませんが、ちょっと制御コードのような文字が出力されています（文字コードまで調べていません）。

```:PyMuPDF
ユーザーガイド
Amazon Bedrock
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon Bedrock
ユーザーガイド
Amazon Bedrock: ユーザーガイド
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon の商標およびトレードドレスは、お客様に混乱を招く可能性がある態様、または Amazon 
の信用を傷つけたり、失わせたりする態様において、Amazon のものではない製品またはサービスに
関連して使用してはなりません。Amazon が所有しない他の商標はすべてそれぞれの所有者に帰属し
ます。所有者は必ずしも Amazon との提携や関連があるわけではありません。また、Amazon の支
援を受けているとはかぎりません。

Amazon Bedrock
ユーザーガイド
Table of Contents
```
PyMuPDFはそのまま出力されているように見えます。
ページヘッダーの「Amazon Bedrock ユーザーガイド」は別の行として出力しています。
```:pypdf
ユーザーガイド
Amazon Bedrock
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon Bedrock ユーザーガイド
Amazon Bedrock: ユーザーガイド
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon の商標およびトレードドレスは、お客様に混乱を招く可能性がある態様、または Amazon 
の信用を傷つけたり、失わせたりする態様において、Amazon のものではない製品またはサービスに
関連して使用してはなりません。Amazon が所有しない他の商標はすべてそれぞれの所有者に帰属し
ます。所有者は必ずしも Amazon との提携や関連があるわけではありません。また、Amazon の支
援を受けているとはかぎりません。
Amazon Bedrock ユーザーガイド
Table of Contents
```
pypdfはそのまま出力されているように見えます。
ページヘッダーの「Amazon Bedrock ユーザーガイド」は同じ行として出力されています。
```:Unstructured
ユーザーガイド
Amazon Bedrock
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon Bedrock
ユーザーガイド
Amazon Bedrock: ユーザーガイド
Copyright © 2024 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.
Amazon の商標およびトレードドレスは、お客様に混乱を招く可能性がある態様、または Amazon
の信用を傷つけたり、失わせたりする態様において、Amazon のものではない製品またはサービスに
関連して使用してはなりません。Amazon が所有しない他の商標はすべてそれぞれの所有者に帰属し
ます。所有者は必ずしも Amazon との提携や関連があるわけではありません。また、Amazon の支
援を受けているとはかぎりません。
Amazon Bedrock
ユーザーガイド
Table of Contents
```
Unstructuredはそのまま出力されているように見えます。
ページヘッダーの「Amazon Bedrock ユーザーガイド」は別の行として出力しています。

### 目次1ページ目
```:pdfminer

Amazon  Bedrock  とは .......................................................................................................................... 1

Amazon  Bedrock  の機能 ................................................................................................................. 1

Amazon  Bedrock  の料金 ................................................................................................................. 2

サポートされている AWS リージョン ............................................................................................ 3

主な定義 ........................................................................................................................................... 4

基本概念 ...................................................................................................................................... 4

高度な機能 .................................................................................................................................. 6

セットアップする ................................................................................................................................. 7

にサインアップする AWS アカウント ............................................................................................ 7

管理ユーザーの作成 ......................................................................................................................... 8

プログラム的なアクセス権を付与する ............................................................................................ 9

コンソールアクセス ....................................................................................................................... 10

モデルアクセス .............................................................................................................................. 11

モデルアクセスを追加する ....................................................................................................... 12

モデルアクセスを削除する ....................................................................................................... 13

モデルのアクセス権限を制御します。 ..................................................................................... 13

API  のセットアップ ....................................................................................................................... 15

モデルアクセスを追加する ....................................................................................................... 16

Amazon Bedrock エンドポイント ............................................................................................ 16

AWS CLI のセットアップ ......................................................................................................... 16

AWS  SDK  セットアップ .......................................................................................................... 17

SageMaker ノートブックを使う ............................................................................................. 19

AWS  SDK  での作業 ..................................................................................................................... 21

ファンデーションモデル情報 ............................................................................................................. 23

基盤モデルの使用 .......................................................................................................................... 25

モデル情報の取得 .......................................................................................................................... 27
AWS 地域別のモデルサポート ...................................................................................................... 28

機能別のモデルサポート ................................................................................................................ 29

モデルのライフサイクル ................................................................................................................ 33

オンデマンド、プロビジョンドスループット、およびモデルのカスタマイズ ........................ 34

レガシーバージョン .................................................................................................................. 35

Amazon Bedrock モデル ID .......................................................................................................... 35

ベースモデル ID (オンデマンド) ............................................................................................... 36

基本モデル ID (プロビジョンドスループット用) ..................................................................... 38

iii
```
pdfminerは基本的に空行が入っていますが、「AWS 地域別のモデルサポート」の前は人間が感じ取れないナニカを読み取って空行が無く出力されています。

```:PyMuPDF
Amazon Bedrock とは .......................................................................................................................... 1
Amazon Bedrock の機能 ................................................................................................................. 1
Amazon Bedrock の料金 ................................................................................................................. 2
サポートされている AWS リージョン ............................................................................................ 3
主な定義 ........................................................................................................................................... 4
基本概念 ...................................................................................................................................... 4
高度な機能 .................................................................................................................................. 6
セットアップする ................................................................................................................................. 7
にサインアップする AWS アカウント ............................................................................................ 7
管理ユーザーの作成 ......................................................................................................................... 8
プログラム的なアクセス権を付与する ............................................................................................ 9
コンソールアクセス ....................................................................................................................... 10
モデルアクセス .............................................................................................................................. 11
モデルアクセスを追加する ....................................................................................................... 12
モデルアクセスを削除する ....................................................................................................... 13
モデルのアクセス権限を制御します。 ..................................................................................... 13
API のセットアップ ....................................................................................................................... 15
モデルアクセスを追加する ....................................................................................................... 16
Amazon Bedrock エンドポイント ............................................................................................ 16
AWS CLI のセットアップ ......................................................................................................... 16
AWS SDK セットアップ .......................................................................................................... 17
SageMaker ノートブックを使う ............................................................................................. 19
AWS SDK での作業 ..................................................................................................................... 21
ファンデーションモデル情報 ............................................................................................................. 23
基盤モデルの使用 .......................................................................................................................... 25
モデル情報の取得 .......................................................................................................................... 27
AWS 地域別のモデルサポート ...................................................................................................... 28
機能別のモデルサポート ................................................................................................................ 29
モデルのライフサイクル ................................................................................................................ 33
オンデマンド、プロビジョンドスループット、およびモデルのカスタマイズ ........................ 34
レガシーバージョン .................................................................................................................. 35
Amazon Bedrock モデル ID .......................................................................................................... 35
ベースモデル ID (オンデマンド) ............................................................................................... 36
基本モデル ID (プロビジョンドスループット用) ..................................................................... 38
iii
```
PyMuPDFはそのまま出力されているように見えます。
```:pypdf
Amazon Bedrock とは ..........................................................................................................................1
Amazon Bedrock の機能 .................................................................................................................1
Amazon Bedrock の料金 .................................................................................................................2
サポートされている AWS リージョン ............................................................................................3
主な定義 ...........................................................................................................................................4
基本概念 ......................................................................................................................................4
高度な機能 ..................................................................................................................................6
セットアップする .................................................................................................................................7
にサインアップする AWS アカウント ............................................................................................7
管理ユーザーの作成 .........................................................................................................................8
プログラム的なアクセス権を付与する ............................................................................................9
コンソールアクセス .......................................................................................................................10
モデルアクセス ..............................................................................................................................11
モデルアクセスを追加する .......................................................................................................12
モデルアクセスを削除する .......................................................................................................13
モデルのアクセス権限を制御します。 .....................................................................................13
API のセットアップ .......................................................................................................................15
モデルアクセスを追加する .......................................................................................................16
Amazon Bedrock エンドポイント ............................................................................................16
AWS CLI のセットアップ .........................................................................................................16
AWS SDK セットアップ ..........................................................................................................17
SageMaker ノートブックを使う .............................................................................................19
AWS SDK での作業 .....................................................................................................................21
ファンデーションモデル情報 .............................................................................................................23
基盤モデルの使用 ..........................................................................................................................25
モデル情報の取得 ..........................................................................................................................27
AWS 地域別のモデルサポート ......................................................................................................28
機能別のモデルサポート ................................................................................................................29
モデルのライフサイクル ................................................................................................................33
オンデマンド、プロビジョンドスループット、およびモデルのカスタマイズ ........................34
レガシーバージョン ..................................................................................................................35
Amazon Bedrock モデル ID ..........................................................................................................35
ベースモデル ID (オンデマンド) ...............................................................................................36
基本モデル ID (プロビジョンドスループット用) .....................................................................38
iii
```
pypdfもそのまま出力されているように見えます。
```:Unstructured
Amazon Bedrock とは .......................................................................................................................... 1
Amazon Bedrock の機能 ................................................................................................................. 1
Amazon Bedrock の料金 ................................................................................................................. 2
サポートされている AWS リージョン ............................................................................................ 3
主な定義 ........................................................................................................................................... 4
基本概念 ...................................................................................................................................... 4
高度な機能 .................................................................................................................................. 6
セットアップする ................................................................................................................................. 7
にサインアップする AWS アカウント ............................................................................................ 7
管理ユーザーの作成 ......................................................................................................................... 8
プログラム的なアクセス権を付与する ............................................................................................ 9
コンソールアクセス ....................................................................................................................... 10
モデルアクセス .............................................................................................................................. 11
モデルアクセスを追加する ....................................................................................................... 12
モデルアクセスを削除する ....................................................................................................... 13
モデルのアクセス権限を制御します。 ..................................................................................... 13
API のセットアップ ....................................................................................................................... 15
モデルアクセスを追加する ....................................................................................................... 16
Amazon Bedrock エンドポイント ............................................................................................ 16
AWS CLI のセットアップ ......................................................................................................... 16
AWS SDK セットアップ .......................................................................................................... 17
SageMaker ノートブックを使う ............................................................................................. 19
AWS SDK での作業 ..................................................................................................................... 21
ファンデーションモデル情報 ............................................................................................................. 23
基盤モデルの使用 .......................................................................................................................... 25
モデル情報の取得 .......................................................................................................................... 27 AWS 地域別のモデルサポート ...................................................................................................... 28
機能別のモデルサポート ................................................................................................................ 29
モデルのライフサイクル ................................................................................................................ 33
オンデマンド、プロビジョンドスループット、およびモデルのカスタマイズ ........................ 34
レガシーバージョン .................................................................................................................. 35
Amazon Bedrock モデル ID .......................................................................................................... 35
ベースモデル ID (オンデマンド) ............................................................................................... 36
基本モデル ID (プロビジョンドスループット用) ..................................................................... 38
iii
```
Unstructuredはちょっと分かりにくいのですが「AWS 地域別のモデルサポート」が直前の行の続きとして解釈されています。pdfminerと同様の解釈だと思われます。

※Unstructuredは内部的にはpdfminerを使っているようです。

### 表

P.3の以下の表部分を見てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/555fc24c-b2ec-912c-98a8-4e432173619e.png)

人間が読む分にはなんてことない表ですが、セルの中で改行されている時点でもう難易度が高いです。

```:pdfminer
リージョンによって制限される機能については、次の表を参照してください。

リージョン モデル評価 ナレッジ

ベース

エージェン
ト

ファイン
チューニン 

継続的な事
前トレー 

プロビジョ
ンドスルー

グ (カスタ

ニング (カ

プット

ムモデル)

スタムモデ

はい

はい

はい

はい

ル)

はい

はい

はい

はい

はい

はい

はい

はい

いいえ

いいえ

いいえ

いいえ

いいえ

いいえ

米国東部
（バージニ 

ア北部）

米国西部 
(オレゴン)

アジアパ
シフィッ
```
pdfminer、
- 同じセルの内容が離れた位置に出力されている
- リージョン以外の列が力された後に、一番左のリージョン列だけ出力されている

など、なかなか厳しい感じです。

```:PyMuPDF
リージョンによって制限される機能については、次の表を参照してください。
リージョン
モデル評価
ナレッジ
ベース
エージェン
ト
ファイン
チューニン 
グ (カスタ
ムモデル)
継続的な事
前トレー 
ニング (カ
スタムモデ
ル)
プロビジョ
ンドスルー
プット
米国東部
（バージニ 
ア北部）
はい
はい
はい
はい
はい
はい
米国西部 
(オレゴン)
はい
はい
はい
はい
はい
はい
アジアパ
シフィッ
いいえ
いいえ
いいえ
いいえ
いいえ
いいえ
```
PyMuPDFは同じセルのものはまとめて出力してくれています（改行はされますが）。
また、同じ行の中で左の列から順に出力してくれているので、これならまあ読めない事も無いです。
ただセル内の改行もセルの違いも行の違いも全て改行１個で表現されているのでこれをLLMが正しく読めるのかは若干気になります。
```:pypdf
リージョンによって制限される機能については、次の表を参照してください。
リージョン モデル評価 ナレッジ
ベースエージェン
トファイン
チューニン 
グ (カスタ
ムモデル)継続的な事
前トレー 
ニング (カ
スタムモデ
ル)プロビジョ
ンドスルー
プット
米国東部
（バージニ 
ア北部）はい はい はい はい はい はい
米国西部 
(オレゴン)はい はい はい はい はい はい
アジアパ
シフィッいいえ いいえ いいえ いいえ いいえ いいえ
```
pypdf、同じセルはまとめて出力してくれていますが、次のセルまでまとめてしまっている箇所があります。惜しい。これも上手く読めなそうです。

```:Unstructured
リージョンによって制限される機能については、次の表を参照してください。
リージョン モデル評価 ナレッジ
ベース
エージェン ト
ファイン チューニン
継続的な事 前トレー
プロビジョ ンドスルー
グ (カスタ
ニング (カ
プット
ムモデル)
スタムモデ
ル)
米国東部 （バージニ
はい
はい
はい
はい
はい
はい
ア北部）
米国西部 (オレゴン)
はい
はい
はい
はい
はい
はい
アジアパ シフィッ
いいえ
いいえ
いいえ
いいえ
いいえ
いいえ
```
Unstructured、同じセルの中のものを同じ行に出力しようとする努力は伺えますが、やり切れていません。また、同じセルのものが離れて出力されている箇所もあります。これもちょっと読むには厳しいですね。

# まとめになっていないまとめ

- 文章はともかく、表形式はやはりやっかい。この段階でうまく抽出が出来ていないと後続のLLMで解析も何もない
- ローデータを入手可能であれば PDF にする前のローデータを LLM に食べさせた方が吉
- 安直に使うにはPyMuPDFは使いやすい気がした
- とはいえ、<a href="https://qiita.com/cyberBOSE/items/f69caa3a3a8278905b0b">前に作ったように</a>同じライブラリでも丁寧に解析・出力を行えばおそらく結果は変わる
- 解析したい文書ファイルに合わせて、どのライブラリを使うのが良いか、抽出方法のカスタマイズが出来ないかを試すのが吉

PDF文章に対する自然言語処理のニーズは高い為、なんらかのブレイクスルーに期待したいところです。とかいってる間に LLM が PDF をネイティブで読めるようになるかもしれません。または（画像変換後の）ビジョンを使った OCR が実用レベルになるかも。