はじめに
本記事では、Unstructured API を Docker 上で動かし、PDFドキュメントなどからテキストや構造化データを抽出する手順を紹介します。背景としては、RAG (Retrieval-Augmented Generation) を構築するため、さまざまな形式の文書から効率的にテキストデータを取り出す必要があるからです。
Unstructured APIについて
Unstructured API は、PDF、DOCX、HTMLなど、さまざまな非構造化データからテキストデータを抽出するためのツールです。利用方法は、サーバーレスサービスやライブラリ形式、自分でホスティング可能なAPI形式など、複数の形態が提供されています。
環境構築: DockerでUnstructured APIをインストール
Unstructured API を Docker イメージで取得し、コンテナを立ち上げる手順を以下に示します。これにより、ローカル環境でAPIを動作させることが可能です。
docker pull downloads.unstructured.io/unstructured-io/unstructured-api:latest
docker run -p 8000:8000 -d --rm --name unstructured-api downloads.unstructured.io/unstructured-io/unstructured-api:latest
テスト実行
次に、APIをテストし、ファイルからデータを抽出してみます。以下のコマンドでリクエストを送信し、結果を確認します。
curl -X POST http://<host>:8000/general/v0/general \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'files=@<file name>' \
-F 'unique_element_ids=true' \
-F 'strategy=fast'
オプション説明
多くのパラメータがありますが、まずは以下の2つのオプションを押さえておけば問題ありません。
-
strategy
-
fast
: デフォルトのオプションで、PDFや画像を処理する際にOCRを行いません。処理速度を優先する場合に最適です。 -
hi_res
: OCR処理を実行します。画像内のテキストも抽出されますが、処理時間が大幅に増加します。
-
OCRを実行すると、処理時間が約20倍(体感的にはもっと)かかることがあります。まずは fast で試してみるのが推奨されます。
実行結果
2CPUのサーバーで16MB、62ページのPDFを処理したところ、OCRなしでは数秒で完了しましたが、OCRを実行すると約8分かかりました。この際、Tesseract が実行されていることが確認できました。
使用したドキュメント
所感
- Unstructured API はさまざまなファイル形式に対応しており、すぐにAPIとして利用できる点が非常に便利です。テキスト抽出の処理も速く、イベント処理やリクエスト処理においても使用できそうです。
- ただし、OCRを使用する場合は処理時間が長くなるため、実用性には制限があるかもしれません。特にOCRの精度を確認するための検証が必要です。