Amazon Textract(テキストラクト)は、AWSが提供する文書解析のAPIです。PDFや画像から文字を読み取るだけでなく、表のセル、フォームの「項目名と値」、署名の位置、指定した質問への答えを構造化データとして返します。一方で、公式の対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語の6言語で、日本語の文書には使えません。この記事では、日本語でどこまで使えないのか、機能ごとの料金と無料枠、東京リージョンでの上限、Python(boto3)での呼び出し方を、AWSの公式資料をもとに整理します。
まとめ:Amazon Textractの要点
- 読み方は「テキストラクト」。文字(text)を抽出する(extract)APIで、表・フォーム・署名・質問応答(Queries)・レイアウトの抽出まで1つのサービスで扱います。
- 対応言語は英・仏・独・伊・葡・西の6言語です。日本語の文字は検出対象の文字一覧に含まれず、縦書きも非対応、手書きとQueriesは英語だけです。
- 料金は1,000ページあたり、文字検出1.50ドル・表15ドル・フォーム50ドル・請求書と領収書10ドルなど機能で大きく変わります(米国東部・100万ページまで)。
- 料金ページには3か月の無料枠(文字検出は月1,000ページ、表やフォームは月100ページ)がありますが、AWSの新しい「無料プラン」のアカウントでは対象外で、利用料はクレジットから引かれます。
- 東京リージョンでも使えますが、既定の同期API上限は各API毎秒1回で、バージニア北部の DetectDocumentText(毎秒25回)の25分の1です。大量処理はクォータの引き上げか非同期APIを前提に設計します。
- 日本語の帳票が中心なら、日本語に対応したOCR(Azure AI Document Intelligence の Read モデル、国内のAI-OCR製品など)を比べるのが先です。
文字検出だけで足りるか、表・フォームの構造まで必要かによって、選ぶAPIと単価が変わります。
Amazon Textractの機能とAPIの使い分け
読み方と名前の由来
Textractは「テキストラクト」と読みます。英語の text(文字)と extract(抽出する)を連想させる名前で、文書から文字とデータを取り出すというサービスの機能をそのまま表しています。発表は2018年11月の re:Invent で、当時の報道でも「OCRを超えるテキスト抽出サービス」として紹介されました。その後も機能の追加は続き、2023年9月にレイアウト抽出、同年10月に Custom Queries が加わり、2025年6月30日には上付き・下付き文字や回転した文字への対応と、FAXなど低解像度文書の検出精度の改善が発表されています。
APIの種類と使い分け
Textractは用途ごとにAPIが分かれています。どのAPIを呼ぶかで料金が10倍以上変わるため、最初に使い分けを決めます。
| API | 取り出せるもの | 主な用途 |
|---|---|---|
DetectDocumentText |
行と単語の文字 | 全文検索・テキスト化 |
AnalyzeDocument |
表・フォーム・Queries・署名・レイアウト | 帳票からの項目抽出 |
AnalyzeExpense |
請求書・領収書の項目と明細行 | 経費・支払処理 |
AnalyzeID |
身分証の項目 | 米国のパスポート・運転免許証のみ |
StartLendingAnalysis |
ローン書類の分類と抽出 | 米国の住宅ローン審査 |
AnalyzeDocument は FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT を組み合わせて指定します。Queries は「請求書の合計額は?」のように英語で質問を渡すと、その答えの文字列を返す機能です。自社の帳票で Queries の精度が足りないときは、学習用5〜2,500件に加え、テスト用5〜1,000件の文書を用意してアダプター(Custom Queries)を作れます(AWSのSet Quotas)。AnalyzeID が米国のパスポートと運転免許証しか扱わない点は、日本の本人確認書類には使えないという意味でもあります。
文字検出・文書解析APIのBlock構造
DetectDocumentTextとAnalyzeDocumentは、結果を Blocks 配列で返します。AnalyzeExpenseはExpenseDocuments、AnalyzeIDはIdentityDocumentsを返すなど、APIごとにレスポンス構造が異なります。各要素の BlockType が PAGE・LINE・WORD・TABLE・CELL・KEY_VALUE_SET・QUERY・QUERY_RESULT・SIGNATURE・LAYOUT_TITLE などを示し、親子関係は Relationships のIDで表します。表のセルの文字を取るには、CELL から CHILD の関係をたどって WORD を集める必要があります。この「IDをたどる処理」を自前で書く手間を省くなら、AWSが公開している amazon-textract-response-parser などの補助ライブラリを使います。
日本語の文書を読めるか:対応言語と文字の制約
対応6言語と手書き・Queriesの英語限定
AWSのSet Quotasには、対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語の文字検出と書かれています。同じページに「手書き文字の認識は英語のみ」「Queriesは英語の文書のみ」ともあり、6言語すべてで全機能が使えるわけではありません。検出した言語を出力に含めない仕様なので、混在文書でどの言語として読んだかを結果から判定することもできません。
縦書き・日本語文字の非対応と文字サイズの下限
同じSet Quotasは、縦書きの文字について「日本語や中国語で一般的な縦書きには対応しない」と日本語を名指しで書いています。さらに検出できる文字の一覧は、a〜z・A〜Z・0〜9、アクセント付きのラテン文字、記号(€ £ ¥ ₹ など)だけで、ひらがな・カタカナ・漢字は含まれていません。日本語の帳票を入れると、英数字と記号だけが拾われ、日本語の部分は抜けるか別の文字に誤読されると考えるべきです。
文字サイズにも下限があり、検出できる文字の高さは15ピクセル以上(150DPIで8ポイント相当)です。英文の帳票でも、FAXや小さな注記は解像度を上げてから送る必要があります。
AWSの日本語文書処理と代替サービス
AWSで文書を扱う別のサービスも、日本語の文字抽出の受け皿にはなりません。生成AIで文書を構造化する Amazon Bedrock Data Automation の文書処理は、公式の上限ページで対応言語がTextractと同じ6言語、縦書きも非対応です。写真や動画の中の文字を拾う Amazon Rekognition の文字検出も、対象言語は英語・アラビア語・ロシア語・ドイツ語・フランス語・イタリア語・ポルトガル語・スペイン語で、日本語は入っていません。
AWSの中で日本語の帳票を処理するなら、Amazon Bedrock の Converse API で画像やPDFをマルチモーダルな生成AIモデルに渡し、項目をJSONで返させる方法が現実的です(Amazon Bedrockの使い方で東京で使えるモデルを確認できます)。ただし、生成AIにJSONを返させるだけではTextractと同等の座標・信頼度は保証されず、桁の読み違いを検出する仕組みを自分で用意する必要があります。AWSにこだわらないなら、Azure AI Document Intelligence の Read モデル(v4.0)は日本語の印刷文字と手書き文字の両方を対応言語に挙げています(料金と使い方はAzure AI Document Intelligenceの料金・使い方)。国内の帳票に特化したAI-OCR製品の比べ方はAI-OCRとはで整理しています。
Amazon Textractの料金と無料枠
機能別の単価
料金は処理したページ数による従量課金で、最低料金や初期費用はありません。単価は機能と月間のページ数で変わります。下表はAWSのPrice List API(米国東部・バージニア北部、2026年10月20日版)の値を1,000ページあたりに換算したものです。
| API・機能 | 100万ページまで | 100万ページ超 |
|---|---|---|
| 文字検出(DetectDocumentText) | 1.50ドル | 0.60ドル |
| レイアウト(LAYOUT) | 4ドル | 3ドル |
| 署名(SIGNATURES) | 3.50ドル | 1.40ドル |
| 表(TABLES) | 15ドル | 10ドル |
| Queries | 15ドル | 10ドル |
| Custom Queries | 25ドル | 15ドル |
| フォーム(FORMS) | 50ドル | 40ドル |
| 表+フォーム+Queries | 70ドル | 55ドル |
| 請求書・領収書(AnalyzeExpense) | 10ドル | 8ドル |
| 身分証(AnalyzeID)※段階境界は10万ページ | 25ドル(10万ページまで) | 10ドル(10万ページ超) |
| ローン書類(AnalyzeLending) | 70ドル | 55ドル |
同期と非同期で単価は同じです。公式の料金ページによると、レイアウトは表(TABLES)と一緒に使えば追加料金がかかりません。単価はリージョンで異なることがあり、2026年10月20日版のPrice List APIには東京リージョンの価格データが含まれていなかったため、東京で使う場合は料金ページとAWSの料金見積りツールで確認してください。
月額の試算:同じ1万ページでも15ドルから700ドル
英文の請求書を月に1万ページ処理する場合で比べます。全文を文字として取るだけなら DetectDocumentText で 10,000 × 0.0015 = 15ドルです。請求書の項目と明細行を取るなら AnalyzeExpense で 10,000 × 0.01 = 100ドル、表・フォーム・Queriesを全部載せた AnalyzeDocument なら 10,000 × 0.07 = 700ドルになります。
フォーム(50ドル)は単価が最も高い機能の一つです。取りたい項目が決まっているなら、フォーム全体を取るより Queries(15ドル)で必要な項目だけ質問するほうが安く済むことが多く、請求書・領収書ならまず専用の AnalyzeExpense を試します。
3か月の無料枠と、新しいAWS無料プランとの関係
料金ページには、新規のAWS顧客向けに3か月の無料枠が掲げられています。月あたりの無料ページ数は次のとおりです。
- DetectDocumentText:1,000ページ
- AnalyzeDocument(表・フォーム・レイアウト・Queriesとその組み合わせ):100ページ
- AnalyzeDocument(署名のみ):1,000ページ
- AnalyzeExpense・AnalyzeID:各100ページ
- AnalyzeLending:2,000ページ
Custom Queries には無料枠がありません。注意したいのは、AWSの新規アカウントが「無料プラン」と「有料プラン」に分かれた点です。AWSの請求ガイドはTextractの無料枠を「短期試用(Short-term trial)」に分類し、無料プランのアカウントで有効になるのは「常時無料(Always Free)」の枠だけだと書いています。つまり無料プランで作ったアカウントでは上の3か月枠は効かず、Textractの利用料は登録時にもらえるクレジット(FAQでは最大200ドル)から差し引かれます。有料プランのアカウントでは短期試用が有効になる場合があるため、請求コンソールの無料利用枠の画面で、自分のアカウントにTextractの枠が出ているかを確かめてから検証量を決めてください。
東京リージョンでの提供状況と処理の上限
リージョン別の同期APIクォータ
Textractは東京リージョン(ap-northeast-1)でも提供されており、AWSのエンドポイント一覧に textract.ap-northeast-1.amazonaws.com が載っています。ただし既定のクォータは、米国東部・米国西部(オレゴン)・米国東部(オハイオ)・欧州(アイルランド)・アジアパシフィック(ムンバイ)以外を「その他のリージョン」としてまとめ、低く設定しています。
| 既定のクォータ | 米国東部(バージニア北部) | 東京(その他のリージョン) |
|---|---|---|
| DetectDocumentText(毎秒) | 25 | 1 |
| AnalyzeDocument(毎秒) | 10 | 1 |
| AnalyzeExpense(毎秒) | 5 | 1 |
| StartDocumentAnalysis(毎秒) | 10 | 2 |
| 同時に存在できる非同期ジョブ | 600 | 100 |
毎秒1回が上限の同期APIを1種類だけ使い、1回につき1ページを送る場合、24時間の呼び出し枠は計算上86,400回となり、スロットリングの再試行が入るとさらに減ります。業務で使う前に、コンソールのクォータ計算ツールで必要量を出し、Service Quotas から引き上げを申請します。入力に使うS3バケットは、Textractを呼ぶリージョンと同じリージョンに置く必要がある点にも注意してください(S3ObjectのAPIリファレンス)。
ファイル形式・サイズ・ページ数の上限
入力できる形式は JPEG・PNG・PDF・TIFF です。同期APIはSet Quotasでは10MBまでとされ、PDFとTIFFは1ページだけ受け付けます。ただしAPIリファレンスのDocument型は、Bytes で渡す場合もS3に置いて渡す場合も最大5MBと書いており、Bytes はPNGかJPEGに限るとしています。同期APIに渡すファイルは5MB以内に収めておくのが安全です。複数ページのPDFは非同期API(StartDocumentTextDetection や StartDocumentAnalysis)で処理し、上限は500MB・3,000ページです。パスワード付きのPDFとXFA形式のPDFは読めません。Queries は1ページあたり同期で15問、非同期で30問までです。これらは引き上げられない固定の上限なので、3,000ページを超える書類は分割してから投入します。
PythonでAmazon Textractを呼び出す手順
準備:IAM権限とboto3
呼び出し元のIAMユーザーまたはロールに、Textractの実行権限(検証なら管理ポリシー AmazonTextractFullAccess、本番は使うAPIだけに絞ったポリシー)と、入力ファイルを置くS3バケットの読み取り権限を付けます。Pythonからは AWS SDK の boto3 を使います。実行環境にboto3をインストールし、IAMロールやAWSプロファイルで認証情報を設定してください。同期例ではinvoice.pngを実行ディレクトリに置き、非同期例ではmy-bucketとscan/contract.pdfを実在するS3バケット名とオブジェクトキーに置き換えます。以下のコードは boto3 1.42.97 で、パラメータの検証とレスポンスの解析が通ることを botocore の Stubber で確かめています。英語の文書を対象にした例です。
Queriesによる請求書の合計額・日付の抽出
1ページの画像を同期APIに渡し、表の抽出と2つの質問を同時に実行します。答えは QUERY ブロックから ANSWER の関係で QUERY_RESULT ブロックをたどって取ります。
import boto3
textract = boto3.client("textract", region_name="us-east-1")
with open("invoice.png", "rb") as f:
resp = textract.analyze_document(
Document={"Bytes": f.read()},
FeatureTypes=["TABLES", "QUERIES"],
QueriesConfig={"Queries": [
{"Text": "What is the invoice total?", "Alias": "TOTAL"},
{"Text": "What is the invoice date?", "Alias": "DATE"},
]},
)
blocks = {b["Id"]: b for b in resp["Blocks"]}
for b in resp["Blocks"]:
if b["BlockType"] != "QUERY":
continue
for rel in b.get("Relationships", []):
if rel["Type"] != "ANSWER":
continue
for i in rel["Ids"]:
ans = blocks[i]
print(b["Query"]["Alias"], ans["Text"], round(ans["Confidence"], 1))
出力は「TOTAL $1,280.00 97.3」のように別名・答え・信頼度(0〜100)の順です。AWSの仕様説明では、答えが見つからない場合は応答要素が空になります。このコードは ANSWER の関係がない質問を出力しないため、未回答も記録したい場合は質問ごとに出力を補ってください。信頼度が高くても桁区切りや小数点を読み違えることはあるため、金額は書式の検査と合計の突き合わせを後段で入れます。
複数ページPDFの非同期処理と結果取得
S3に置いたPDFでジョブを開始し、完了を待ってから NextToken で結果を最後のページまで取ります。1回の Get で返るブロック数には上限があるため、NextToken を追わないと後半のページが欠けます。
import time
import boto3
textract = boto3.client("textract", region_name="us-east-1")
job_id = textract.start_document_text_detection(
DocumentLocation={"S3Object": {"Bucket": "my-bucket", "Name": "scan/contract.pdf"}}
)["JobId"]
while True:
r = textract.get_document_text_detection(JobId=job_id)
if r["JobStatus"] != "IN_PROGRESS":
break
time.sleep(5)
if r["JobStatus"] != "SUCCEEDED":
raise RuntimeError({
"JobStatus": r["JobStatus"],
"StatusMessage": r.get("StatusMessage"),
"Warnings": r.get("Warnings", []),
})
lines = []
while True:
lines += [(b["Page"], b["Text"]) for b in r.get("Blocks", []) if b["BlockType"] == "LINE"]
if "NextToken" not in r:
break
r = textract.get_document_text_detection(JobId=job_id, NextToken=r["NextToken"])
print(r["JobStatus"], len(lines))
JobStatus は IN_PROGRESS・SUCCEEDED・FAILED・PARTIAL_SUCCESS のいずれかです。ここではポーリングで待っていますが、件数が多い本番では NotificationChannel にSNSトピックを指定し、完了通知を受けてから Get を呼ぶ構成にするとGetの呼び出し回数(東京の既定は毎秒5回)を節約できます。
Textractを採用すべき場面と避けるべき場面
採用してよいのは、英語など対応6言語の文書を、AWSの中で大量に構造化したい場合です。海外拠点の英文請求書を AnalyzeExpense で読み、S3に置かれたら Lambda で処理して結果をデータベースに入れる、といった流れはTextractの守備範囲そのものです。表の行と列、フォームの項目名と値を座標と信頼度つきで返すので、人が確認する画面を作りやすい点も利点です。
避けるべきなのは、日本語の請求書・申込書・手書き帳票が主な対象の場合です。日本語は設定やアダプターで対応言語に追加できず、日本語部分の抽出結果は保証されません。日本語と英語が混ざる帳票も、英数字の欄だけ拾えて日本語の項目名が取れないため、フォーム抽出(項目名と値の対応)が成り立ちません。ローカルで日本語の縦書きまで読みたいならオープンソースのTesseract(日本語と縦書きの学習データがある)、ページ数が多く精度を求めるなら日本語対応のクラウドOCRや国産AI-OCRを比べます。帳票の電子化を業務フローごと設計する場合は、AI-OCR導入支援でOCRの選定から後段のシステム連携まで相談を受けています。
また、AWSのAIサービスは、顧客のコンテンツをモデルの学習を含むサービス改善に使い、別のリージョンに保存することがあるとAWS Organizationsのドキュメントに書かれています。Textractもその対象サービスに含まれ、止めるには Organizations の AI サービスのオプトアウトポリシーを設定します。契約書や個人情報を含む文書を流す前に、このポリシーを組織全体に適用しておきます。
よくある質問
Amazon Textractの読み方は?
「テキストラクト」と読みます。text(文字)と extract(抽出する)を連想させる名前で、文書から文字とデータを取り出すAPIであることを表しています。
Amazon Textractは無料で使えますか?
料金ページには3か月の無料枠があり、文字検出は月1,000ページ、表・フォーム・Queriesは月100ページまで無料です。ただしこの枠は「短期試用」の扱いで、AWSの無料プランのアカウントでは有効にならず、利用料は登録時のクレジットから引かれます。Custom Queries には無料枠がありません。
Amazon Textractは日本語に対応していますか?
対応していません。対応言語は英・仏・独・伊・葡・西の6言語で、検出できる文字の一覧にひらがな・カタカナ・漢字は含まれず、縦書きも非対応です。手書き文字とQueriesは英語だけが対象です。
Amazon Textractの料金はどのくらいかかりますか?
米国東部の100万ページまでの単価で、1,000ページあたり文字検出1.50ドル、表15ドル、フォーム50ドル、請求書・領収書10ドルです。英文の請求書を月1万ページ処理すると、文字検出だけなら15ドル、AnalyzeExpenseなら100ドルが目安です。
Amazon TextractとTesseractの違いは?
TextractはAWSのマネージドAPIで、表やフォームの構造を座標と信頼度つきで返しますが、日本語は読めません。Tesseractは自分の環境で動かすオープンソースのOCRエンジンで、日本語と縦書きの学習データがある一方、表やフォームの構造化は自分で実装する必要があります。