【UiPath】StudioWeb × Document Understanding 実装上のポイント

# はじめに

- 本記事は、StudioWeb で Document Understanding（モダンプロジェクト） を扱いたい方向けの内容です。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 24.10 バージョンのもので構成しています。

# StudioWeb × Document Understanding のテンプレート（自動生成WF）

テンプレートは次の2通りの手順で自動生成できます。

***■すぐ使えるモデルから生成（フォームAI）***

Document Understanding のトップ画面の右上の「オートメーションを作成する」をクリック ＞ 以降の手順は省略

![フォームAI.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/cef71ee2-f002-a695-7975-4451f9bf6133.jpeg)

（生成されるWF）
![フォームAI2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/dab1b281-89ed-3b61-79fc-42c17748cfa3.jpeg)


***■独自モデルのパブリッシュ画面から生成***

対象プロジェクト（モダン）＞パブリッシュ画面の右下の「StudioWebを開く」をクリック ＞ 以降の手順は省略

![独自モデル.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ec3b79be-bedd-e561-c668-2b262c7c0ddd.jpeg)

（生成されるWF）
![独自モデル2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4abbc16f-7d46-d6e9-add7-e03b83301322.jpeg)
![独自モデル2-2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ad48286d-269e-cf46-171e-c2c83b8341bc.jpeg)

::: note
💡ポイント
1. 両テンプレートの違いは***単一ファイルをロードするか、ディレクトリ以下のファイルを繰り返し処理でロード・抽出するか***のみです。
1. 処理内容を端的に書くと ***「➀ストレージバケットから読み取り対象ファイルをダウンロード」＞「➁ドキュメントデータを抽出」＞「➂検証タスクを登録」＞「➃ドキュメントデータの中身をログに書き出す」*** です。
:::
::: note warn
StudioWeb のプロジェクトでは IntelligentOCRパッケージのアクティビティが利用できない（2024/12/06時点）ため、***定型帳票（固定レイアウト）の自動化は従来通りStudioでおこなう必要があります。***
:::

# StudioWeb × Document Understanding 実装上のポイント
## 入力ファイルの取得

Gドライブに配置したファイルを利用する例を以下で説明します。
（ストレージバケットのサンプルはテンプレートにあるため省略）

![Gドライブのファイルで入力.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ad2aa27a-fb1d-d5d6-b396-066fe0f63ed3.jpeg)
![Gドライブのファイルで入力2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/f3b71abe-d2b1-40ba-9cf7-fba65647a17b.jpeg)
![Gドライブのファイルで入力3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/3bbd3d6e-42cc-16de-4296-c355ec2010ce.jpeg)

■手順
1. 「ファイル/フォルダーのリストを取得」（出力：GDriveRemoteItem[]）
1. 繰り返し（コレクションの各要素）でGDriveRemoteItemを取得
1. 必要に応じて処理対象ファイルの判定ロジックを追加
1. 「ファイルをダウンロード」（入力：GDriveRemoteItem 出力：GDriveLocalItem ← こちらはドキュメントデータ抽出の入力にそのまま使えます）

::: note
ストレージバケットは、OCの画面上からだと1ファイルずつしかアップロードできないため、束登録したい場合は別に登録用ロボットを作成する必要があります。
:::

## ドキュメントデータの抽出

フォームAIの場合、「***Predefined***（事前学習済みモデル＝すぐ使えるモデル）」がプロジェクトに設定され、抽出器は自由に変更できますが、***抽出されるフィールドはカスタマイズできません。*** ※データ出力部で任意の項目のみ記述すればよいので、新しいフィールドを追加したいケース以外では特に困ることはありません。

![抽出2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/0b4c49da-9b18-bce1-0c90-5480ceb5672f.jpeg)

独自モデルの場合、Document Understanding のドキュメント種類マネジャーにて扱う***フィールドを定義・カスタマイズできます。***
抽出器を選び直したタイミングで抽出されるフィールドは変わります。
***※フィールドの定義を変更した際は、抽出器をパブリッシュする前に再度アノテーションをおこなうなどしてトレーニング処理を走らせましょう！***

![抽出.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/a9825e55-6f11-7c4b-4a16-1be25faa2be9.jpeg)

::: note
✔ IntelligentOCRパッケージのデジタル化アクティビティでは ***「ドキュメントテキスト」*** と ***「DOM」*** を出力できました。
「ドキュメントデータを抽出」の出力である ***Document Data オブジェクト*** も、***メタデータセクション***に同内容を含みます！

***■ドキュメントテキストの取得例***
extractedResults.DocumentMetadata.Text
***■DOMの操作例***
extractedResults.DocumentMetadata.DocumentObjectModel.Pages(0).Sections(0).WordGroups(0).Words(0).Text
:::

::: note
![自動検証.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/69afe53a-46d3-f651-585a-35bb54245a3c.jpeg)
***自動検証を適用*** - 生成 AI による抽出のクロスチェックを使用し
て、信頼度を調整します。生成 AI によって確認された報告値の信
頼度は ***99%*** に引き上げられます。この機能を有効化すると、追
加の AI ユニットが消費されます。
:::

## 抽出結果の検証

Action Center での確認が不要であれば、検証タスクの登録部はコメントアウトするだけでOK

![検証.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/65f0a275-521a-9049-6c91-b46ef91cf1d9.jpeg)

::: note warn
検証タスクを登録するアクティビティにはストレージバケットを指定する詳細オプションがあります。
***設定したバケット内にはタクソノミーやDOM、抽出結果オブジェクトのJSONが出力されます***が、こちらはファイルパスのIDの生成ロジックが不明（少なくともジョブのキーやドキュメントのIDなどでないことは確か）で利用できません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/fb9032ca-6fae-4306-ec39-9bd5711abaf6.png)
:::

::: note
![自動検証2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/aeb41d28-bf87-ec1a-28b6-5f138a7e61ed.jpeg)
「ドキュメントデータを抽出」で ***「自動検証」をオン***に設定し、信頼度に 99% が表示されている例です。
:::

## 抽出結果からのデータ出力

抽出結果オブジェクト（Document Data）からの値の取り出し方は、以前書いた記事をご参照ください↓↓

https://qiita.com/Kajiita/items/f0f960aaf244b3aee9a8

今回は、OneDrive＆SharePointのEXCELファイルに明細データを書き出す実装例を記載します。

![EXCELに出力.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b15f8ab5-522e-2fc6-dc7a-3dba785ed638.jpeg)
![EXCELに出力2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/98eadeb4-ca35-3344-c05b-4910b911948a.jpeg)

■手順
1. 繰り返し（コレクションの各要素）でextractedResults.Data.Itemsを取得
1. 「行を書き込み」アクティビティを配置
1. 書き込みたい範囲を指定（Sheet1のA1セルであれば「"Sheet1!A1"」）
1. 書き込み方法に「追加」、書き込む内容に「配列行」を選択
1. 書き込む配列行の値を設定（以下、例）

（配列の値の例）
{currentItems.明細行番号.ToString,currentItems.明細品番.ToString,currentItems.明細行の小計.ToString}

# さいごに
いかがでしたでしょうか。
OCにパブリッシュしたロボットは、Cloud - サーバレスロボットをフォルダのマシンタブに割り当てれば、他のURと同様にスケジュール実行も可能です。

![サーバレスロボット割り当て参考.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/eaa8091c-d916-493a-1545-f01806ef316a.jpeg)

テンプレート（自動生成WF）をちょっといじるだけでDUロボット出来上がり☀
ご興味のある方は是非是非触ってみてください。
最後までお読みいただきありがとうございます(・ω・)ノ