皆さん、PDFでRAGやってますよね?でも、精度が出ないことありますよね?
いい感じに複雑なPDFを見つけました。
中小企業の情報セキュリティ対策ガイドライン
付録6:中小企業のためのクラウドサービス安全利用の手引き
表があったり図形の中の文字があったりします。
PDFのままテキスト抽出する
マイクロソフト製で話題のMarkItDownを使用してテキストを抽出してみましょう。
-
インストール
pip install markitdown
-
実行
markitdown 000072150.pdf > 000072150.md
やばいくらい簡単です。
では、結果を見てみましょう。
先ほど提示した右ページの「チェックシートNo.1」「チェックシートNo.2」の横並びのところですが、内容が入れ子になってしまいました。(ハイライトしている部分がNo.1でその間にあるのがNo.2の内容です)
また、見た目を忠実に再現しているからか、文の途中で改行されています。
意外とPDFをつかってRAGをすると、こういうケースあると思います
PDFを一旦Wordに変換する
おそらくこのファイルはWordで作ったものだと推測されるので、PDFをWordに戻してやれば精度が良くなるのではないかと考えました。
AdobeがオンラインツールとしてPDFから各種Officeファイルへの変換機能を提供しています。
無料で使えるとありますが、無制限に使えるわけではなく一定回数以上は有料になるようです。
このオンラインツールを使って先程のPDFをWord形式に変換してみます。
変換したファイルをWordで開いてみると、フォントが少しおかしいですが、内容は問題なく変換されているように見えます。
では、このWordファイルからテキストを抽出してみましょう。
markitdown 000072150.docx > 000072150.docx.md
やばい。完璧。
そういえば、MarkItDownはMarkdownにしてくれるツールでしたねwww
(PDFをそのまま変換したときは、全然Markdownじゃなかったですね。)
一度Wordを経由すると、 表も完璧です
これは、、すごい!
LibreOfficeで同じことができないか実験
いちいちブラウザ上で変換するわけにもいかないので、コマンドで変換したくなりました。
LibreOfficeを使うと、PDFをWordに変換できるようなので早速試しました。
sudo apt update
sudo apt install -y libreoffice
変換コマンドはこのようになります。
lowriter --headless --infilter='writer_pdf_import' --convert-to docx:"Office Open XML Text" 000072150.pdf --outdir libreoffice_output
libreoffice_output
ディレクトリが作成され、000072150.docxが出力されます。
他の形式への変換はこのようになります。
lowriter --headless --infilter='writer_pdf_import' --convert-to docx:"MS Word 2007 XML" 000072150.pdf --outdir libreoffice_output
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でテキストを抽出してみましょう。
markitdown libreoffice_output/000072150.docx > libreoffice_output/000072150.docx.md
結果は、、、
全然あかんかった😭
No.1のあとにNo.3があって、更にNo.2はないけどNo.4がありますね。。
変換オプションとかあるかと思って色々試したのですが、残念ながらこれ以上良い結果にすることはできませんでした。
まとめ
やっぱりPDFのことはAdobeが最強なのか?
PDFを上手にWordにする方法ご存じの方いたら、情報提供お願いします!!