【UiPath】【DU】正規表現ベースの抽出器の使い方

# はじめに

- 本記事は、***Document Understanding の「正規表現ベースの抽出器」アクティビティ***の使い方を扱います。
- 記事の内容は、個人の見解または確認結果であり、UiPath の公式見解ではありません。
- 製品仕様や参考画像は 24.10 バージョンのもので構成しています。

# 「正規表現ベースの抽出器」

![正規表現ベースの抽出器のイメージ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e546a0e4-c66a-ab9a-82f5-40aa41c39b93.jpeg)

![正規表現ベースの抽出器のイメージ2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/8b11fb63-39a4-b589-c4e5-f3ae1c1deb13.jpeg)

UiPath.IntelligentOCR.Activities パッケージに含まれるアクティビティで、「データ抽出スコープ」アクティビティの中に配置して使います。
開発者の方には使いやすく、AI Unit も消費しない（デジタル化と正規表現抽出器のアクティビティは無料です！ ※DU契約はある前提）お勧めアクティビティなのですが、意外にもGoogle検索して使い方の記事がヒットしなかったので書きます。

## 使い方

まず、抽出までのミニマム構成は以下の様なかたちです。
（タクソノミー読み込みとデジタル化の部分の説明は省略します。）

![ミニマム構成のイメージ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/ad269196-15c8-e21e-fab9-4a185decc19c.jpeg)

1. タクソノミーの読み込み（あらかじめタクソノミーの設定が必要です。）
1. デジタル化（「ドキュメントをデジタル化」アクティビティを使用）
1. 正規表現抽出（「データ抽出スコープ」と「正規表現ベースの抽出器」アクティビティを使用）

::: note
***「データ抽出スコープ」や「検証ステーションを表示」アクティビティの利用予定がない場合***、タクソノミーの設定は不要のため、次のアクティビティでデジタル化したテキストで正規表現抽出することもできます。

「***一致するパターンを探す***」アクティビティ（旧名称：「一致する文字列を取得」）
![タクソノミー不要.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/246a7d35-e156-5f63-3857-fcb3310c331c.jpeg)
:::

データ抽出スコープの設定箇所は大きく次の3つ

![抽出スコープの設定.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/b946d224-ec34-2646-bbdb-cfe41ac2910c.jpeg)

➀：入出力の変数・引数を指定する
➁：正規表現の式を設定する
➂：使用する抽出器および項目を設定する

➀は見たままなので、➁と➂を詳細補足します。

### 式を設定（➁番）

![抽出スコープの設定2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/37721876-6151-f95e-9aa4-28a4d5f130f8.jpeg)

式を設定したい項目の「編集」ボタンを押下します。

![抽出スコープの設定3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/9d61c4c1-07aa-2c7f-43cc-59e9cbe34b1f.jpeg)

***正規表現欄（※）から「カスタム」を選び、値に正規表現の式を入力します。***

※：選択肢
- リテラル
- 数字
- 指定の文字
- 指定外の文字
- 任意の1文字
- 任意の英数字
- 空白
- 行頭
- 行末
- カスタム
- メールアドレス
- URL
- 米国形式の日付
- 米国形式の電話番号

正規表現が苦手な方は、「カスタム」ではなく、下図の様にオプションを一つずつ選んで設定してみてください。

![初心者向け.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/aa44de0f-7d63-cffc-37ba-09cf991cc95f.jpeg)

::: note
***「キャプチャ」オプションのチェックをONにしましょう！***

***あわせて、「正規表現ベースの抽出器」のプロパティの「視覚的配置を使用」も「True」にしましょう！***

![抽出スコープの設定4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/5772514d-8678-85fe-0774-18b16fb2672d.jpeg)

既定（False）の動作（仕様）がいまいちわかりませんが、このオプションをTrueにすることで私は期待結果を得られています。

https://docs.uipath.com/ja/document-understanding/standalone/2022.4/user-guide/regex-based-extractor-activity-configuration
![抽出スコープの設定5.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/f3f23789-9dc4-d695-c56d-605ed221dce4.jpeg)
:::

#### 正規表現オプションについて

![正規表現オプション.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/e18b2306-acc2-efa7-175b-aa739a5b3b33.jpeg)

指定できるオプションと意味
|オプション|意味|
|:---:|:---:|
|IgnoreCase|アルファベットの大文字と小文字を区別しない|
|Multiline|^と＄は、各行の行頭と行末に一致する。なお、指定しない場合は、^と$はテキスト全体の先頭と末尾のみに一致する|
|ExplicitCapture|名前のない部分式はキャプチャしない|
|Compiled|繰り返して実行する場合、検索速度が少し向上する|
|Singleline|.（ピリオド）が、改行文字にも一致する|
|IgnorePatternWhitespace|パターンに含まれる空白文字を無視する。また、パターン内の#文字以降もコメントとして無視する|
|RightToLeft|テキストを右から左の順で検索する|
|ECMAScript|ECMAScript（標準JavaScript）の正規表現エンジンと同じ動作となる。たとえば、\dは全角数字には一致しない|
|CultureInvariant|自然言語に固有の事情を無視する。たとえば、トルコ語ではiの大文字がIではないため、大文字と小文字を区別しない検索で意図しない結果となる場合がある|

上記のオプション説明は津田先生の公式ガイドを参考にさせていただきました。
[公式ガイドを購入したい方はこちら！](
https://www.amazon.co.jp/%E5%85%AC%E5%BC%8F%E3%82%AC%E3%82%A4%E3%83%89-UiPath%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%95%E3%83%AD%E3%83%BC%E9%96%8B%E7%99%BA%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80-ver2021-10%E5%AF%BE%E5%BF%9C%E7%89%88-%E6%B4%A5%E7%94%B0-%E7%BE%A9%E5%8F%B2/dp/4798065951)

### 抽出器を設定（➂番）

![抽出スコープの設定6.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/6699869d-a2e6-8805-2d8d-7481116fc45e.jpeg)

***正規表現で抽出したい項目のチェックをONにします。***

::: note
フォーム抽出器やマシンラーニング抽出器など、他の抽出器と併用した（他の抽出器もチェックをONにした）際の挙動ですが、下図の様にフォーム抽出器が信頼度86%であっても、***正規表現抽出器で値がとれた場合は正規表現抽出器の結果が優先されます。***

（フォーム抽出器単体）
![フォーム抽出器単体.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/59501f6e-16dd-6330-b5a6-eac733532739.jpeg)

（併用）
![検証ステーション_2個釣れたときの表示.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/4d8d6550-7b2e-3e9a-75c1-b2ba47bf0d23.jpeg)
補足：正規表現で結果が2件とれてきたため、1件あたりの信頼度は50%

なお、***正規表現とフォーム抽出器ともに最小信頼度を80%に指定すれば、正規表現抽出器で値がとれなくなるため、フォーム抽出器の86%のもの1件となります。***

![最小信頼度参考.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/04663241-76a2-8160-cd21-fd783a0cbbb1.jpeg)

![フォーム抽出器と正規表現ともに最小信頼度80.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3301444/952a0333-2c70-0cdc-8129-073d77773acd.jpeg)
:::

# さいごに
いかがでしたでしょうか。
定型フォーマットのドキュメントであれば、正規表現抽出だけでも事足りることもあるかとおもいます。
まだ触ったことがない方は是非使ってみてください。
最後までお読みいただきありがとうございます(・ω・)ノ