Amazon Textractで単一ページのPDFファイルを同期処理出来るようになりました

2022.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

Amazon TextractではPDFや画像からのドキュメント解析を行いテキスト抽出からテーブル、フォームの抽出まで行うことが出来ます。
そして、Textractの解析処理モードには同期モードと非同期モードがあります。

同期モードではファイルのバイナリまたは格納先のS3バケットを使って、レスポンスですぐに分析結果を取得することが出来ます。
一方で、非同期モードではS3バケットに格納したファイルを解析し、分析が完了するまで定期的に確認するか、あるいはSNSトピックで完了の通知を受け取る必要があります。

これまで、同期モードではPDFを扱うことが出来ませんでした。
同期モードPDFファイルを解析するためには、事前にPDFファイルをPNGまたはJPEG形式に変換して、同期モードを使う必要がありました。

今回のアップデートで、単一ページのPDFファイルについてはファイル形式を変換せずに同期モードで処理出来るようになりました。

対象の同期API

AWS CLIのドキュメント上は、まだPNGまたはJPEG形式の必要があるという記述になっていますが、PDFのBase64バイナリデータを処理できるようになっています。

ためしてみる

単一ページのPDF

macOSのテキストエディットアプリケーションで単純なPDFファイルを作成し、AWS CLIでDetectDocumentTextを使ってみます。

detect-document-textサブコマンドのdocumentオプションにPDFバイナリデータのBase64エンコードデータを指定します。

iwasa.takahito@hoge 20220131textract % base64 -i hoge.pdf 
JVBERi0xLjMKJcTl8uXrp/Og0MT ... Dttx/x7T7rxUM
iwasa.takahito@hoge 20220131textract % aws textract detect-document-text --region us-east-1 --document Bytes=<上記のBase64文字列>
{
    "DocumentMetadata": {
        "Pages": 1
    },
    "Blocks": [
        ...
        {
            "BlockType": "WORD",
            "Confidence": 98.9758071899414,
            "Text": "Testiwasa",
            "TextType": "PRINTED",
            "Geometry": {
                "BoundingBox": {
                    "Width": 0.0891358032822609,
                    "Height": 0.012719232589006424,
                    "Left": 0.12797260284423828,
                    "Top": 0.08702042698860168
                },
                "Polygon": [
                    {
                        ...
                    }
                ]
            },
            "Id": "6397604b-db4f-40fd-bc8f-d9b742dc1d0a"
        },
        {
            "BlockType": "WORD",
            "Confidence": 99.72116088867188,
            "Text": "Hogehoge",
            "TextType": "PRINTED",
            "Geometry": {
                "BoundingBox": {
                    "Width": 0.09071356803178787,
                    "Height": 0.015643108636140823,
                    "Left": 0.1291443556547165,
                    "Top": 0.10328111052513123
                },
                "Polygon": [
                    {
                        ...
                    }
                ]
            },
            "Id": "c6a7da65-0b25-4f34-bf51-2a7f7fb86b84"
        }
    ],
    "DetectDocumentTextModelVersion": "1.0"
}

そのままPDFのデータからドキュメント抽出結果が取得出来ていますね。

複数ページのPDF

複数ページPDFでも試してみます。

An error occurred (UnsupportedDocumentException) when calling the DetectDocumentText operation: Request has unsupported document format

こちらはサポートされていないドキュメントフォーマットということで、エラーになりました。

さいごに

本日はTextractの同期APIで新しくサポートされた単一PDFの解析を試してみました。

これまで外部サービスなどから解析結果を利用する場合に同期処理を使う必要があって事前に画像変換していた場合はその手間がいらなくなりますね。
同期処理を使っている方は見直してみてください。