PDFにひと手間加えてRAGの精度を向上させられるかもしれない方法を見つけました

皆さん、PDFでRAGやってますよね？でも、精度が出ないことありますよね？

---
いい感じに複雑なPDFを見つけました。

[中小企業の情報セキュリティ対策ガイドライン](https://www.ipa.go.jp/security/guide/sme/about.html)
付録6：中小企業のためのクラウドサービス安全利用の手引き

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b2b1c414-20d7-3c47-ac4f-3a9b85bcf332.png)

表があったり図形の中の文字があったりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ea59ef98-a089-1c93-9e44-c26d8a8aa74e.png)


## PDFのままテキスト抽出する

マイクロソフト製で話題のMarkItDownを使用してテキストを抽出してみましょう。

https://github.com/microsoft/markitdown

* インストール
    ```shell
    pip install markitdown
    ```

* 実行
    
    ```shell
    markitdown 000072150.pdf > 000072150.md
    ```

やばいくらい簡単です。

では、結果を見てみましょう。
先ほど提示した右ページの「チェックシートNo.1」「チェックシートNo.2」の横並びのところですが、内容が入れ子になってしまいました。（ハイライトしている部分がNo.1でその間にあるのがNo.2の内容です）

また、見た目を忠実に再現しているからか、文の途中で改行されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d5a310f7-b22e-aa30-712a-28a28ee33bc8.png)

:::note
意外とPDFをつかってRAGをすると、こういうケースあると思います
:::

## PDFを一旦Wordに変換する

おそらくこのファイルはWordで作ったものだと推測されるので、PDFをWordに戻してやれば精度が良くなるのではないかと考えました。

AdobeがオンラインツールとしてPDFから各種Officeファイルへの変換機能を提供しています。

https://www.adobe.com/jp/acrobat/online.html

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/bd216eaf-633e-52f1-fae2-5a5a28e20c6f.png)

:::note
無料で使えるとありますが、無制限に使えるわけではなく一定回数以上は有料になるようです。
:::

このオンラインツールを使って先程のPDFをWord形式に変換してみます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/e8602806-ed9f-c2fa-a065-aeff40192589.png)

変換したファイルをWordで開いてみると、フォントが少しおかしいですが、内容は問題なく変換されているように見えます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/16c3b036-aa9c-a6d4-f48e-c3aa488b0d4a.png)

では、このWordファイルからテキストを抽出してみましょう。

```shell
markitdown 000072150.docx > 000072150.docx.md
```

やばい。完璧。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/2a5fba06-df32-9143-0ea8-5cf8f5ac996f.png)

そういえば、MarkItDownはMarkdownにしてくれるツールでしたねwww
（PDFをそのまま変換したときは、全然Markdownじゃなかったですね。）

一度Wordを経由すると、 **表も完璧です**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/c05bb7d3-f8f5-3099-bd94-a91448ffbe03.png)

これは、、すごい！

## LibreOfficeで同じことができないか実験

いちいちブラウザ上で変換するわけにもいかないので、コマンドで変換したくなりました。
LibreOfficeを使うと、PDFをWordに変換できるようなので早速試しました。

```shell
sudo apt update
sudo apt install -y libreoffice
```

変換コマンドはこのようになります。

```shell:PDFをWord（2010以降）の形式に変換
lowriter --headless --infilter='writer_pdf_import' --convert-to docx:"Office Open XML Text" 000072150.pdf --outdir libreoffice_output
```

`libreoffice_output`ディレクトリが作成され、000072150.docxが出力されます。


:::note
他の形式への変換はこのようになります。

```shell:PDFをWord 2007形式に変換
lowriter --headless --infilter='writer_pdf_import' --convert-to docx:"MS Word 2007 XML" 000072150.pdf --outdir libreoffice_output
```

```shell:PDFをWord 97–2003形式に変換
lowriter --headless --infilter='writer_pdf_import' --convert-to doc:"MS Word 97" 000072150.pdf --outdir libreoffice_output
```

コマンドの使い方、ファイルフォーマットの情報は公式ドキュメントを参照ください。
https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html
:::

ではMarkItDownでテキストを抽出してみましょう。

```shell
markitdown libreoffice_output/000072150.docx > libreoffice_output/000072150.docx.md
```

結果は、、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/a0a2eb22-143d-1ee4-284f-862c142e6761.png)

**全然あかんかった😭**

No.1のあとにNo.3があって、更にNo.2はないけどNo.4がありますね。。

変換オプションとかあるかと思って色々試したのですが、残念ながらこれ以上良い結果にすることはできませんでした。

## まとめ

やっぱりPDFのことはAdobeが最強なのか？

**PDFを上手にWordにする方法ご存じの方いたら、情報提供お願いします！！**