RPAツール「UiPath」で行うノーコードな言語解析と感情分析【Azure Text Analytics API】

#はじめに
この記事ではRPAツール「UiPath」で文章の言語（日本語、英語etc）を解析し、また文章中の感情についても解析を行う方法を記載しています。

言語・感情分析については、「UiPath」の機能として備わっているのでなく、Microsoft Azureの「Text Analytics API 」を使用しています。
[Text Analytics](https://azure.microsoft.com/ja-jp/services/cognitive-services/text-analytics/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/fa27d438-44ac-dbe2-0fab-e7b40e3ab994.png)

「UiPath」にはこの「Text Analytics API 」とデータをやりとりするアクティビティが用意されているため、それを利用します。
[Microsoft Text Analysis](https://docs.uipath.com/activities/lang-ja/docs/microsoft-text-analysis)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/2d221e8e-ce40-3fab-9395-cad2e2c3a5b2.png)


本記事では、Azureの「Text Analytics API」とそれと連携できるUiPathの「Text Analysis」アクティビティを利用して言語解析・感情分析を行うための方法について記載します。ノーコードでAIを利用してみたいと思います。

範囲は、Azureの無料アカウントの作成、Azure上でのText Analyticsリソースの作成、UiPath Studio上のワークフローの作成です。
Azureは無料枠、UiPathも無料のCommunity Editionを使用しています。

先に書くと結果はこんな感じです。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">UiPath上で言語解析をしてみました。<br>Microsoft Text Analytics APIを使用しています。<br><br>日本語の文章と英語の文章を解析して言語を認識しています。<br><br>英語文章は感情分析も出来ています。(指数が1に近いほどポジティブ)<a href="https://twitter.com/hashtag/UiPathFriends?src=hash&amp;ref_src=twsrc%5Etfw">#UiPathFriends</a> でも出てきた字幕アクティビティも使ってみました～。<a href="https://twitter.com/hashtag/UiPath?src=hash&amp;ref_src=twsrc%5Etfw">#UiPath</a> <a href="https://t.co/WBhtT2EJ82">pic.twitter.com/WBhtT2EJ82</a></p>&mdash; ナカ (@nakaamino) <a href="https://twitter.com/nakaamino/status/1261678633581568003?ref_src=twsrc%5Etfw">May 16, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">肝心なメッセージが見ずらいのでスクショを。 <a href="https://t.co/III2qJ8yt8">https://t.co/III2qJ8yt8</a> <a href="https://t.co/EVqwXJuj7N">pic.twitter.com/EVqwXJuj7N</a></p>&mdash; ナカ (@nakaamino) <a href="https://twitter.com/nakaamino/status/1261681012888662017?ref_src=twsrc%5Etfw">May 16, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#Microsoft Azure「Text Analytics API」について
今回の肝になるAzureの「Text Analytics API」についてもう少し掘り下げてみます。
「Text Analytics API」は、Microsoft Azure上で提供されるCognitive Servicesの一つです。
Azure Cognitive Servicesとは、AI により、機械学習の専門知識がなくても、あらゆる開発者が利用することができるサービスです。
AIにて文章解析、画像解析、音声解析を行うことができます。
音声解析では、音声を元に文字をお越し、また、感情の分析も行うことができます。
これらのサービスのいくつかは制限範囲内で無料で使用することができます。

[Azure Cognitive Services](https://azure.microsoft.com/ja-jp/services/cognitive-services/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/be724bad-9a90-19f8-0d0a-91aa9320bb83.png)

今回使用する「Text Analytics API」の話に戻ります。
「Text Analytics API」がどのようなことができるか製品サイトで試すことができます。
[Azure Text Analytics API](https://azure.microsoft.com/ja-jp/services/cognitive-services/text-analytics/)

製品サイトにアクセスすると以下のようなテキストと分析結果が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b273901d-ea46-14f6-6486-e4af96486447.png)

この長～～～～い英文の言語が英語で感情としては、ポジティブな要素が多い文章だと言っています。美味しいレストランについてレビューの文章だそうです。英語の文章だと私が英語でできないので日本語の文で試してみます。

まずは、ポジティブな文章。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/704f7df5-b316-87f6-34c9-8fe17ad8ddd5.png)

かなり分かりやすい（稚拙な）文章にしていますが、言語が日本語でポジティブな文章であると解析されています。

次にネガティブな文章。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/3b5de9af-319f-b1de-ca43-c6048802c2df.png)
前文と同じ用に言語は日本語と解析されていますが、文章はネガティブな文章であると解析されています。

このように、文章の内容を元に言語の解析と感情の分析を行ってくれます。
こちらをUiPathから使用してみるというのが本記事の目的です。

#準備
本処理を実現するために必要となる準備は大きく以下の2つです。
1.Microsoft Azureのアカウント作成
2.UiPath Studioのセットアップ

はじめにも書きましたがいずれの環境も無料で用意することができます。
新たに環境を作る方は以下の記事を参考にしてください。

Azure無料枠のアカウント枠の作成についてはこちらの日商エレクトロニクスさんの記事が新しく詳しいです。
[Azure アカウント登録方法を伝授（2020年版）](https://cloud.nissho-ele.co.jp/blog/azure_registration2020/)

次に、無料版のUiPathの環境作成については私が作成した記事をご確認ください。
開発環境「UiPath Studio」の利用開始まで記載しています。
[【2020年5月時点】UiPath Community Cloudの利用方法［①アカウント登録～UiPath Studioのインストール］](https://qiita.com/nakaamino/items/37d134f63eedbca8bb34)

これらの準備が終わったらここからが実際に行う設定の内容です。

#Azure Text Analytics API のリソース作成方法
「Text Analytics API」を使用するためにはAzure上でリソースを作成する必要があります。
必要と言っても大した手順ではありません、5分もあれば終わります。

Azure Portalにログインします。
[Azure Portal](https://ai-products.net/15554/summary-of-companies-that-provide-rpa-free-of-charge-as-support-for-new-coronavirus-measures/)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/524fe156-6919-79a5-69c8-ff2669bd13ab.png)

画面上部の検索バーで「Text Analytics」と入力します。
検索結果のMarket Place欄に出てきた「Text Analytics API」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/c0624c92-6fca-5825-7e7f-10c23f489f0d.png)


「Text Analytics API」の設定画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/3c2223e5-259a-cd8b-1761-e42578168993.png)

必要情報を入力します。下記は入力例です。

| 項目名|設定内容|
| :-----------------|:------------------|
| 名前|任意のリソース名を入力します。この記事で「はUiPathTest0518」としました。|
| サブスクリプション|無料試用版|
| 場所|(US)米国西部 ※(US)米国西部2ではありません。|
| 価格レベル|F0 (無料枠です)|
| リソースグループ|既に作成済みのリソースを選択するか新規作成から作成（ここでは新規に「UiPathResource」という名前で作成しました）|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/800636e9-0b82-b34f-4bbf-b65e7f35e721.png)


ここで注意が必要なのはリージョンです。選択リージョンによっては後述のUiPathからの接続でハマることがあります。ハマりたくない場合は、「(US)米国西部」を選択してください。私はハマりました。

画面下の「作成」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/a3cc4a7b-f044-3fc6-687f-ddb56b830934.png)

リソース作成中の画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/140d7073-8031-8eff-411b-50d5b3161160.png)


リソースが作成されたら遷移します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e362e4c9-3541-ee5f-1163-8fc573e8203f.png)

リソース画面に切り替わったら、「キーとエンドポイント」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/36fad06c-401e-bb54-ba88-e91a217c0fda.png)


UiPathのアクティビティからアクセスするためにAPIキーをコピーして、メモ帳等の保存しておきます。使うのはもう少し後です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e93a6905-b37b-ff9d-2883-6d201172cfc8.png)


ここまででAzure側の作業は終わりです。
続いて、UiPath側の操作です。

#UiPathでのTextAnalyticsの使い方


まずは、UiPathStudioを起動します。
「新しいプロセス」をクリックします。
名前の入力を求められるので任意の名前を設定してください。ここでは「UiPathTextAnalytics」としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b91e02b6-f52d-9311-f480-54a727c6ce0c.png)

新しいプロセス（プロジェクト）が起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/555cc501-d155-cc07-e8da-8d96c3a76f6a.png)

起動したら最初に行うのは、TextAnalyticsを使用できるアクティビティを追加します。
UiPathでは、標準のアクティビティの他にUiPath Marketplaceで企業や個人が作成したアクティビティを追加することができます。
今回使用するアクティビティもUiPath Marketplaceからダウンロードします。
今回のダウンロードはUiPath Studioから行います。

画面上部の「パッケージを管理」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/41d7c879-fbdf-69bf-1e6a-c42168c4d4f3.png)

パッケージの管理画面が表示されるので「オフィシャル」をクリックし、検索窓に「Cognitive」と入力し、検索してください。
「UiPath.Cognitive.Activities」が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/148f0999-42e1-67d0-1b72-2b6f513cac6e.png)

「UiPath.Cognitive.Activities」をクリックし、右側のウィンドウの「インストール」をクリック後、「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/9b932857-597a-5ba3-d86a-a213db9f5af5.png)

再度、プロジェクトの画面に戻ってきます。
一見変わりが無いようですが、依存関係ツリーの所に「UiPath.Cognitive.Activities」が追加されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/b3ae9c67-9818-cb65-d7be-ed24106c9f93.png)

ここからは実際にワークフローを記述していきます。
Main.xamlをダブルクリックで開きます。
![2020-05-18_21h30_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/23ba4d44-d462-1e5e-a380-3c546615d718.png)


今回は３つアクティビティで構成します。
1.メッセージ入力ダイアログアクティビティ：解析用文章入力用
2.TextAnalyticsのアクティビティ：文章解析処理用
3.メッセージボックスアクティビティ：解析結果表示処理用

最初にメッセージ入力ダイアログのアクティビティを設定します。
このアクティビティでは、TextAnalyticsで解析してほしい文章を入力します。
アクティビティタブに切り替え、アクティビティの検索窓に「入力ダイアログ」と入力し検索します。
入力ダイアログアクティビティが表示されますので、ダブルクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/ff193cfd-757a-bc7d-642d-f96abb808aa2.png)

シーケンス内にアクティビティが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/a98ae166-c127-30a8-4f3b-454c32ef16f9.png)
以下のプロパティに設定をします。

| 項目名|設定内容|
| :-----------------|:------------------|
| タイトル|"言語解析してほしい文章を入力してください"|
| ラベル|"言語を判定します"|
| 結果|新規変数 InputString を設定（Ctrl+kで作成。）![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4f7fdc9a-01e8-820f-7642-d83fda8f45cd.png)|

設定後はこんな感じになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e38108b5-66b4-67eb-1f16-4b29e66df3c6.png)

次にTextAnalyticsのアクティビティを追加します。
アクティビティの検索窓に「テキスト分析」と入力し検索します。
いくつかテキスト分析のアクティビティが表示されますが、「Microsoftテキスト分析」をダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/cd241758-b42b-721b-a129-d7680df3bfa4.png)

シーケンス内にアクティビティが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/0bd7c4ee-81a9-7a31-0dac-58f5265a4645.png)
以下のプロパティに設定をします。

| 項目名|設定内容|
| :-----------------|:------------------|
| 分析の種類|Language, Sentiment（言語と感情の分析を設定します。）|
| プライベート|未チェック（デフォルト）|
| キー|Azureで作成したAPIキー。上の手順でコピーしたものを""でくくって貼り付けます。|
| サービスURL|Text Analyticsのリージョンを「(US)米国西部」を選択した場合は空欄。異なるリージョンの場合はエンドポイントURLのはずです。|
| テキスト|変数 InputString（上の手順で作成した変数です）|
| エラー|String型の変数を設定（私は「Err」という名前で設定）。エラー文字を格納する変数です。|
| キーフレーズ|String型の変数を設定（私は「Key」という名前で設定）。解析時に感情分析の元になったキーフレーズ（今回は使用しないので空欄でも大丈夫）|
| センチメント|Double型の変数を設定（私は「Centi」という名前で設定）。感情値です。この値が1に近いほどポジティブ、0に近いほどネガティブと判断された文章ということになります。|
| 言語|String型の変数を設定（私は「Lang」という名前で設定）。解析した文章の言語（JapaneseやEnglish）が格納されます。|

設定後はこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/f98f27d8-41cf-ea3b-f43b-7a41c3e186db.png)
※APIキーについて
本当はこれらのキーは必要なとき以外は見えないよう、また、共通の値として管理するの良いです。
UiPathであればOrchestratorのアセットに保存していくのが良いですが、今回は直打ちします。

最後にメッセージボックスのアクティビティを追加します。
アクティビティの検索窓に「メッセージボックス」と入力し検索します。
表示された「メッセージボックス」アクティビティをダブルクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/4225c0f4-ff6e-056c-169f-110cf8c47990.png)

シーケンス内にアクティビティが追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/65508fd2-320a-02a1-a012-811a8bd1324c.png)

今回はテキストプロパティのみ設定します。
テキストプロパティに
```"『" & InputString & "』" &  "の言語は「" &  Lang & "」です！" & VBCRLF & "この文章の感情指数は「" & Centi & "」です。"
```と設定します。
テキストプロパティ右横の…ボタンをクリックし、式エディタを表示すると入力しやすいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/34a02696-72f4-562d-f873-9fe8d970f40d.png)
式エディタで入力したら「OK」をクリックします。

設定後はこんな感じになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/0e9cf3f9-56a4-678b-795f-051bcda20fa6.png)


これでワークフローは完成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/c8716612-5593-5684-0fa3-83211b397e51.png)

このあとは早速実行してみます。
画面上部のデバッグボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/70c2d66a-7a93-9b23-55aa-8349bace0832.png)

メッセージ入力ウィンドウが開きますので、解析して欲しい文章を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/35e4a43e-fcbf-c047-a7ce-9e49f849893e.png)

まずは言語解析を検証してみます。
最初は日本語で
```この言語は何ですか？
```と入力し、「OK」をクリックします。

結果が表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/0c0b1a5a-8e38-e555-5144-036636b54586.png)
ちゃんと日本語であると解析してくれています。
OKをクリックすると処理が終了します。

続いて再度デバッグ実行します。
今度は英語で
```What is this language?
```と入力ます。

結果は…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/bbbd081f-31fc-dacd-693f-3b33c9a8e1e8.png)
こちらもちゃんと英語であると解析してくれています。

次に感情分析です。再度デバッグ実行をします。
日本語で
```今日の夕御飯はラーメンでした。とても嬉しかった！
```というポジティブな文章を入力し、「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e8d27da5-6b75-12d6-8fae-6c8cfc3cb42b.png)

結果は…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/d5149155-2739-9126-01b7-867a22d32054.png)
無事に日本語であると解析していますが、感情指数が0.5という半端な数字です。
AI的にラーメンは嬉しくないのかな？

再度デバッグ実行をして、上記の文を英文にしてみました。
```Today's dinner was ramen. I was very happy!
```を入力し、「OK」をクリックします。

結果は…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/d9115cdc-6a14-4225-c98b-5057418cbb0d.png)
今度はポジティブと判断されました。
感情指数が1に近いほどポジティブなため0.96はかなりポジティブです。

念の為ネガティブな文も投入してみます。

```Today's dinner was ramen. I was so bad!
```
結果は…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/d984db7a-1d2a-7c6a-dbaf-ec3270c4593b.png)
今度はネガティブと判断されました。
感情指数が0に近いほどポジティブなため0.13はネガティブと言えます。

このように言語の判定は日本語でも英語でも他の言語でも正確に行えますが、感情分析については英文であれば正確に行うことができます。
これは、UiPathのアクティビティの仕様ではなく「Text Analytics API」の仕様とだと考えています。
「Text Analytics API」のリファレンスサイトで検証した結果がこちらです。

入力値
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/e464fd3f-b44e-6c4c-5b26-fb737ac27108.png)
入力結果（解析結果）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547452/bd752aca-1b4c-79a4-8c54-4b7755bf69fd.png)
ポジティブな文章が微妙な結果です。

#まとめ
このようにAPIを使用し、RPAでAIによる言語判定・感情分析を行うことができます。
日本語文章についても一度翻訳をかけてしまえば感情分析も行えるはずです。
（翻訳については今後記事にするようです。）

ノンコーディング且つプロパティも日本語化されているので、非常に設定を簡単に行うことができました。

いずれも無料で試すことができますので、気軽に始めるAI活用ということで試して貰えたら嬉しいです。