- はじめに
- 基本情報
- BPMN を使用したプロセス モデリング
- ケース管理を使用したプロセス モデリング
- フローを使用したプロセス モデリング
- プロセスの実装
- プロセスの操作
- プロセスの監視
- プロセスの最適化
- 参考情報
IXP の抽出モデルを使用してドキュメントから構造化フィールドを抽出します。
抽出ノードは、UiPath Intelligent eXtraction Platform (IXP) モデルを使用してドキュメント (請求書、領収書、フォーム、契約書) から構造化フィールドを取得し、その結果を返して下流のノードが操作できるようにします。プロセス内のステップで、非構造化ファイルから型指定されたデータを取得する必要がある場合に使用します。
開始する前に: IXP モデルをデプロイする
抽出ノードには独自の組み込み抽出器がありません。組織にデプロイされている IXP モデルが表示されるため、ノードの下にオプションを表示するには、少なくとも 1 つの IXP 抽出モデルをデプロイする必要があります。
- IXP でモデルを構築してデプロイします。詳細については、 IXP のドキュメント をご覧ください。
- モデルは、自分がアクセスできるフォルダーにデプロイする必要があります。モデルは、完全修飾名
<Folder>/<ModelName>で一覧表示されます (例:Shared/Finance/invoice-extraction)。 - モデルがデプロイされていない場合、[ 抽出] カテゴリはパレットに表示されますが、空になります。
また、テナントで IXP サービスと Document Understanding サービスの両方が有効化されている必要があります ([管理] → [テナント] → サービス)。IXP モデルのみを使用する場合でも、[抽出] ノードは両方がプロビジョニングされているかどうかによって異なります。
動作のしくみ
コネクタ ノードが Integration Service から読み込まれるのと同じように、抽出モデルは組織から動的に読み込まれます。ノード パレットでは、デプロイされたモデルが [ドキュメント処理] → [抽出] の下に、それぞれが専用のノードとして表示されます。キャンバスに 1 つを追加すると、その特定のモデルにバインドされた抽出ノードが作成されます。
ノードを実行すると、フローはドキュメントを IXP モデルに送信します。モデルはドキュメントをデジタル化して抽出し、構造化された結果がノードの outputに返されます。抽出は非同期的に実行されます。ノードではモデルが完了するのを待ってから続行するため、大きなドキュメントの場合は時間を確保してください。
構成
抽出ノードをキャンバスに追加した後、プロパティ パネルでノードを設定します。
| フィールド | Required | 既定 (Default) | 説明 |
|---|---|---|---|
| モデル | はい | 選択したモデル | 実行する IXP モデルがデプロイされました。パレットからノードを追加したときに設定され、モデルのフォルダとバージョンが自動的にバインドされます。 |
| Document | はい | なし | 抽出元のファイルです。トリガーからの添付ファイルや前のノード出力など、フローの早い段階で生成されたファイルにバインドします。 |
| ページ範囲 | いいえ | 空 | 抽出元のページ (例: 1-3)。ドキュメント全体を処理する場合は、空のままにします。 |
出力
Extract ノードは、 $vars.<nodeName>.outputで結果を返します。
| 変数 | 説明 |
|---|---|
output | 抽出結果。ドキュメントのメタデータ、抽出フィールド、フィールドごとの信頼度スコアを含む 1 つの ExtractionResult オブジェクトが含まれます。形状の詳細については、「 結果を読み取る」をご覧ください。 |
error | ノードに障害が発生した場合のエラーの詳細。には、 code、 message、 detail、 category、 statusが含まれています。ノードのエラー ハンドルが接続されている場合に使用できます。 |
結果を読み取る
抽出結果は入れ子になった構造です。抽出されたフィールドは ExtractionResult.ResultsDocument.Fieldsの下に存在し、各フィールドの値はフィールドに直接配置されるのではなく、 Values 配列内にあります。
$vars.<nodeName>.output = {
ExtractionResult: {
DocumentId: "<id>",
ResultsVersion: 0,
ResultsDocument: {
DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
Fields: [
{
FieldId: "Test.Financial.Invoice.Total", // model-qualified id
FieldName: "Total", // leaf label, use this for lookups
FieldType: "Text",
IsMissing: false,
Values: [
{ Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
]
}
// ...one entry per field in the model schema
]
}
}
}
$vars.<nodeName>.output = {
ExtractionResult: {
DocumentId: "<id>",
ResultsVersion: 0,
ResultsDocument: {
DocumentTypeField: { Value: "Invoice", Confidence: 1.0, OcrConfidence: -1.0 },
Fields: [
{
FieldId: "Test.Financial.Invoice.Total", // model-qualified id
FieldName: "Total", // leaf label, use this for lookups
FieldType: "Text",
IsMissing: false,
Values: [
{ Value: "12.57", Confidence: 0.604, OcrConfidence: 0.604, Components: [], Reference: {} }
]
}
// ...one entry per field in the model schema
]
}
}
}
下流の スクリプト ノードで 1 つのフィールドの値を読み取るには、 ExtractionResult.ResultsDocument.Fieldsに到達し、フィールドの FieldNameでフィールドを検索し、 Values[0].Valueを読み取ります。
const value =
$vars.extract1.output
?.ExtractionResult?.ResultsDocument?.Fields
?.find((f) => f.FieldName === "Total")
?.Values?.[0]?.Value;
const value =
$vars.extract1.output
?.ExtractionResult?.ResultsDocument?.Fields
?.find((f) => f.FieldName === "Total")
?.Values?.[0]?.Value;
フィールド名にはモデル スキーマ (Invoice No.、 Vendor Name) のスペースと大文字と小文字が含まれるため、正規化されたルックアップの方が堅牢になります。
const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
const f = fields.find((x) => norm(x.FieldName) === norm(name));
return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};
const total = get("Total");
const vendor = get("Vendor Name");
const fields = $vars.extract1.output?.ExtractionResult?.ResultsDocument?.Fields || [];
const norm = (s) => String(s || "").toLowerCase().replace(/\s+/g, "");
const get = (name) => {
const f = fields.find((x) => norm(x.FieldName) === norm(name));
return f && Array.isArray(f.Values) && f.Values[0] ? f.Values[0].Value : undefined;
};
const total = get("Total");
const vendor = get("Vendor Name");
よくある間違い: Fields.find((f) => f.FieldName === "Total").Value を読み取ると が返 undefined。フィールドは ResultsDocument.Fields ( ExtractionResultより 1 レベル深い) の下にあり、値はフィールドに直接配置するのではなく、 Values 配列内に存在します。従来の Document Understanding ワークフローからコピーした例はフラットな形状を使用しているため、ここでは機能しません。
欠落しているフィールド
モデルが見つからなかったフィールドには、 IsMissing: true と空または null の Values 配列があります。常に Values?.[0] でガードし(上記のスニペットのように)、欠けているフィールドが投げるのではなく undefined と読み取るようにします。
信頼度スコア
抽出された各値には Confidence と OcrConfidenceが含まれており、どちらも 0 から 1 まで浮動小数点であり、高いほど確実です。これらは、 Values[0].Confidenceの 値オブジェクト上に配置されます。値 -1.0 は「該当なし」を意味するセンチネル (テーブルのヘッダー行など) であるため、比較する前にフィルター処理して除外してください。判断 ノードは 、信頼度の低い抽出結果を レビューのために人間のタスク にルーティングする場合に使用します。
表フィールド
FieldTypeが Table のフィールドでは、上のスカラー図形ではなく Valuesの下に行が保持されます。テーブルの各値には Components 配列 ( Header 行と Body 行) が格納され、各コンポーネントはセル フィールドを独自の Componentsの下に保持し、それぞれに使い慣れた Values[0].Valueが付いています。再帰的に Components 歩いて個々の細胞に到達します。
エラー処理
抽出ノードはエラー ハンドルをサポートしています。抽出が失敗し、エラー ハンドルが接続されている場合、実行はエラー パスにルーティングされ、エラー オブジェクトは $vars.<nodeName>.errorになります。詳しくは「 エラー処理 」をご覧ください。
備考
- [抽出] カテゴリのモデルのリストには、設計時に組織にデプロイされているものが反映されています。IXP にモデルをデプロイまたは再デプロイしてから、パレットを再度開いて変更内容を確認します。
- フィールド値は、日付や数値であっても、常に文字列
Values[0].Valueです。モデルは、解析された部分をDerivedFieldsで返す場合もあります (たとえば、日付のYear、Month、Day、住所のCityとCountry)。