Get Started

ファイル処理ノードを使用する(PDF Text Reader)

ファイル処理ノードを使用する(PDF Text Reader)

ファイル処理ノードを使用する(PDF Text Reader)

ノードの使い方 — PDFテキストリーダー(PDF Text Reader)ノード

このチュートリアルでは、AgentriaのPDFテキストリーダー(PDF Text Reader)ノードの使い方を説明します。PDFテキストリーダーノードは、PDFファイルからテキストコンテンツのみを抽出して文字列として返し、各ページがその文字列のどの範囲に当たるかという情報も併せて提供します。

このチュートリアルでは、PDFファイルをアップロードするとテキストを抽出して返す「PDFテキスト抽出」ワークフローを完成させます。

事前準備

Agentriaキャンバスへの進入方法については、🔗3ステップコアガイドをご参照ください。

PDFファイルを1つ用意します。ページ範囲の情報を確認するため、2ページ以上のファイルをおすすめします。

用意したファイルにテキストレイヤー(Text Layer)があるかを最初に確認します。 PDFテキストリーダーノードが読み取る対象は、ファイル内に文字情報として保存されたテキストレイヤーです。PDFビューアーで文書の文字をドラッグして選択範囲が作られる場合、または文書内検索で単語が見つかる場合は、テキストレイヤーがあるファイルです。選択も検索もできない場合、ページが画像のみで構成されているため、テキストは抽出されません。

テキストレイヤーがないファイルを使用すると、ノードはエラーを出さずに空の文字列を返すため、原因を特定しにくくなります。詳しい内容は、後述の参考:抽出されたテキストの特徴で説明します。

このチュートリアルを完了すると、以下のことができるようになります。

  1. PDFテキストリーダーノードのpdf項目にファイルタイプの変数を接続できます。

  2. 抽出されたテキストをfull_textとして受け取り、他のノードから参照できます。

  3. page_infosで各ページがfull_textのどの範囲を占めるかを確認できます。

  4. ノードテスト(Node Test)で抽出結果をすぐに確認できます。

  5. アビリティテスト(Ability Test)でワークフロー全体の動作を確認できます。

ワークフロー概要

このチュートリアルの中心はPDFテキストリーダーノードです。

PDFテキストリーダーノードは、接続されたPDFファイルからテキストコンテンツを抽出し、full_textという1つの文字列として返します。さらにpage_infosが各ページに対応する文字列の範囲を示すため、特定のページのテキストだけを選んで使うこともできます。

PDFテキストリーダーノードは「ファイル処理ツール」カテゴリに属します。処理するファイル形式に応じて、以下のノードも併せて活用できます。

ノード

対応形式

返却形式

Upstage AI OCRノード

画像・スキャン文書

文字列

Excel Readerノード

.xlsx, .xls

ヘッダー、行、行数

CSV Readerノード

.csv

ヘッダー、行、行数

JSON Readerノード

.json

オブジェクト/配列

テキストリーダー(Text Reader)ノード

.txt, .log, .md, .csv

文字列

Word Readerノード

.docx

マークダウン

HWPX Readerノード

.hwpx

マークダウン

HTML Readerノード

.html

マークダウン

ステップ1:入力変数の宣言(スタートノード)

スタートノード(Start Node)をダブルクリックしてノードエディター(Node Editor)を開きます。アビリティキャンバスでは、スタートノードはAbility Inputと表示されます。

入力変数(Input Variables)領域で以下の変数を追加し、保存(Save)をクリックします。

タイプ

変数名

説明

File

pdf_file

テキストを抽出するPDFファイル

pdf_fileは、次のステップでPDFテキストリーダーノードの入力として接続する変数です。

ステップ2:PDFテキストリーダーノードの追加

キャンバスでノード追加(Add Node)をクリックし、「ファイル処理ツール」カテゴリからPDFテキストリーダーノードをドラッグ&ドロップ(Drag and Drop)でキャンバスに配置します。

ステップ3:PDFテキストリーダーノードの設定

New PDF Text Reader Node 1ノードをダブルクリックしてノードエディターを開きます。

PDFテキストリーダーノードは以下の項目を提供します。

項目

必須

説明

pdf

必須

テキストを抽出するPDFファイル。単一ファイルのみ入力可能

pdf項目に、スタートノードのpdf_file変数をドラッグ&ドロップで接続します。

ノードが正常に実行されると、以下の2つの値を出力します。

アウトプット

タイプ

説明

full_text

文字列

PDF全体から抽出したテキスト

page_infos

配列

各ページがfull_textのどの範囲を占めるかの情報

page_infosの各要素は、pageoffsetlengthの3つの値で構成されます。


  • page : ページ番号です。0から始まるため、1ページ目は0です。

  • offset : そのページのテキストがfull_textのどの文字位置から始まるかを示します。

  • length : そのページのテキストの文字数です。


full_textは、すべてのページのテキストが区切りなくつながった1つの文字列です。したがって、offsetからlengthの分だけ切り出せば、特定のページのテキストだけを取得できます。

full_textには、ページが変わる位置に改行や区切り文字が入りません。前のページの最後の文字と次のページの最初の文字がそのままつながります。つまりfull_textだけではページの境界が分からないため、ページ単位で処理する場合はpage_infosを使用します。

ステップ4:エッジでノードを接続

キャンバスで以下の順にエッジ(Edge)を接続します。

  1. スタートノードのアウトピン(Out-Pin) → New PDF Text Reader Node 1ノードのインピン(In-Pin)

  2. New PDF Text Reader Node 1ノードのアウトピン → エンドノードのインピン

ステップ5:エンドノードの設定

エンドノード(End Node)をダブルクリックしてノードエディターを開きます。アビリティキャンバスでは、エンドノードはAbility Outputと表示されます。

出力変数(Output Variables)領域で以下の変数を追加し、保存(Save)をクリックします。

タイプ

変数名

説明

String

extracted_text

PDFリーダーから受け取った抽出テキスト

追加したextracted_text項目に、PDFテキストリーダーノードのfull_textをドラッグ&ドロップで接続します。

ステップ6:ノードテストで出力を確認

ノードエディター上部のテスト(TEST)ボタンをクリックすると、左側にテスト入力(Test Input)パネルが開きます。[Ability Input] pdf_file項目に用意したPDFファイルをドラッグ&ドロップでアップロードし、テスト(Test)をクリックします。

アウトプット領域(Output Section)で以下の2つの結果を確認します。


  • full_textに、PDFに含まれるテキストが文字列として格納されます。

  • page_infosに、ページ数と同じ数の要素が生成されます。2ページの文書であれば[0][1]の2つが表示されます。


page_infosを展開し、値がつながっているかを確認します。たとえば[0]length1092であれば、[1]offset1092になります。前のページが終わった位置から次のページが始まるためです。

ノードテストは、該当するノードのみを単独で実行します。前後のノードを接続していない状態でも抽出結果を先に確認できるため、ワークフローを完成させる前にファイルが正しく読み込まれるかを点検する際に役立ちます。

full_textが空の場合、ファイルにテキストレイヤーがない可能性が高いです。page_infoslengthがすべて0になっていないかを確認します。詳しい内容は、後述の参考:抽出されたテキストの特徴で説明します。

ステップ7:アビリティテストでワークフロー全体を実行

キャンバス右下のRUN TESTボタンをクリックして、アビリティテストを実行します。

pdf_file項目にPDFファイルをアップロードしてテストを実行すると、エンドノードのextracted_textに抽出されたテキストが返されることを確認できます。

参考:抽出されたテキストの特徴

PDFテキストリーダーノードは、PDFに含まれるテキストをそのまま読み取ってつなげます。元の文書の視覚的な構造は保持されないため、抽出結果を次のノードで活用する際は、以下の特徴を参考にしてください。

テキストレイヤーがあるPDFからのみ抽出されます。 PDFのページには、文字情報を持つテキストレイヤー(Text Layer)と、絵で構成された画像がそれぞれ含まれます。PDFテキストリーダーノードが読み取るのは、このうちテキストレイヤーです。紙の文書をスキャンしたり写真で撮影したりしたPDFは、ページが画像のみで構成されているため、読み取るテキストレイヤーがありません。

ただし、スキャンした文書であっても、光学文字認識(OCR、Optical Character Recognition)処理を経たPDFにはテキストレイヤーが含まれているため、抽出が可能です。 スキャナーソフトウェアや文書編集ツールの文字認識機能は、認識した文字を元の画像の上に見えないテキストとして重ねて保存するためです。見た目はスキャン画像と変わりませんが、ファイルの中には文字情報も一緒に入っています。このようなPDFを検索可能なPDF(Searchable PDF)と呼びます。

テキストレイヤーがないファイルを接続した場合、ノードはエラーを出さず、正常完了として処理し、full_textに空の文字列を返します。 ワークフローが成功したかのように進み、次のノードへ空の値が渡されるため、原因を見つけにくいことがあります。この場合はpage_infosを併せて確認すると判別できます。

区分

full_text

page_infos

テキストレイヤーがあるPDF

抽出されたテキスト

lengthにページごとの文字数

テキストレイヤーがないPDF

空の文字列

要素は生成されるがlengthがすべて0

ページ数と同じ数の要素は正常に生成されますが、すべての要素のlength0として返されます。ページは認識できたものの、その中に文字情報がないという意味です。

テキストレイヤーがない文書からテキストを取得するには、Upstage AI OCRノードのように光学文字認識を行うノードや、画像も併せて理解できるAIモデルノードを使用します。

OCR処理を経たPDFのテキストレイヤーには、認識結果がそのまま保存されています。そのため、抽出はできても、元の文書とは異なる文字が混ざっている場合があります。

表はセルのテキストのみが残ります。 表は左から右、上から下の順にセルの内容が並び、行と列を区別する値は含まれません。見出し行も本文と同じテキストとして混ざり、表が終わる位置を知らせる表示もありません。表のデータを行単位で扱う必要がある場合は、Excel ReaderノードやCSV Readerノードのように、ヘッダーと行を分けて返すノードを使用します。

ヘッダーとフッターも一緒に抽出されます。 ページ番号や文書タイトルが繰り返し入る文書の場合、抽出されたテキストの途中に同じ文言が繰り返し現れます。

元の文書の改行位置に空白が入ります。 韓国語などは単語の途中でも行が変わるため、行が変わった位置で単語が2つに分かれて見えることがあります。AIモデルノードに渡して要約・分類する用途であれば大きな問題にはなりませんが、特定の単語を文字列として正確に検索する必要があるワークフローでは、この点を考慮する必要があります。

次のステップ

🎉 おめでとうございます! Agentriaを使って「PDFテキスト抽出」ワークフローを完成させました。

抽出したテキストをAIモデルノードに接続すれば、要約・分類・質疑応答など、さまざまな文書処理ワークフローへ拡張できます。page_infosの範囲情報を活用して、特定のページのテキストだけを選んで処理する構成も作ってみてください。

Agentriaは、アイデアを現実に変える可能性の空間です。

あなたのアイデア次第で、ワークフローは無限に広がります。



よくある質問

PDFテキストリーダーノードとは何ですか?

PDFテキストリーダー(PDF Text Reader)ノードは、AgentriaでPDFファイルのテキストコンテンツのみを抽出して返すノードです。「ファイル処理ツール」カテゴリに属し、pdf項目にPDFファイルを1つ接続すると、全体のテキストをfull_textという文字列として、各ページがその文字列で占める範囲をpage_infosという配列として出力します。

PDFテキストリーダーノードはどのようなときに使いますか?

PDF文書の内容をワークフローの中でテキストとして扱う必要があるときに使用します。契約書・報告書・マニュアルなどのPDFをAIモデルノードに渡して要約や分類を行うには、まずPDFテキストリーダーノードでテキストを抽出する必要があります。ただし、文字情報を持つテキストレイヤー(Text Layer)があるPDFである必要があり、ページが画像のみで構成されたファイルからはテキストが抽出されません。ファイル形式がPDFでない場合は、Excel ReaderノードやWord Readerノードなど、その形式に対応したリーダーノードを使用します。

full_textとpage_infosはどう違いますか?

full_textはPDFのすべてのページのテキストが1つにつながった文字列で、page_infosはその文字列をページ単位で分ける基準となる配列です。page_infosの各要素は、ページ番号(page、0から開始)、開始位置(offset)、文字数(length)を持ちます。文書全体を扱う場合はfull_textを、特定のページだけを選んで処理する場合はpage_infosの範囲情報を使用します。

PDFファイルを複数まとめて処理できますか?

PDFテキストリーダーノードは、1つのノードが1つのファイルを処理します。pdf項目には単一のファイルしか接続できないため、複数のPDFを扱う場合は、処理するファイルの数だけPDFテキストリーダーノードをキャンバスに配置し、ファイルを1つずつ接続します。

PDFテキストリーダーノードとUpstage AI OCRノードはどう違いますか?

2つのノードは代替関係ではなく、扱う文書の種類が異なります。PDFテキストリーダーノードはPDFにすでに含まれているテキストレイヤーをそのまま読み取って返すため、ページが画像のみで構成されたファイルでは空の文字列が返されます。Upstage AI OCRノードは、画像やスキャンされた文書から光学文字認識(OCR、Optical Character Recognition)で文字を直接認識してテキストを作り出すノードで、外部のAPIキーをノードのAPI Key項目に入力して使用します。スキャンした文書であっても、OCR処理を経てテキストレイヤーが含まれているPDFであればPDFテキストリーダーノードで抽出できるため、ファイルがスキャンかどうかではなく、テキストレイヤーがあるかどうかを基準に選択します。