Automation Anywhere A2019のFuzzy Matchを使ってみた

# 概要
Automation Anywhere A2019には[AI](https://ja.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%9F%A5%E8%83%BD)や[ファジー](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%B8%E3%82%A3%E8%AB%96%E7%90%86)な論理を簡単に取り入れることができるしくみがいくつか備わっていますが、その中に**「Fuzzy Match」**という文字列比較アクションがあります。

Fuzzy Matchは2020年3月現在、まだベータ版であり、かつ[公式ドキュメント](https://docs.automationanywhere.com/bundle/enterprise-v2019/page/enterprise-cloud/topics/aae-client/bot-creator/using-the-workbench/cloud-commands-panel.html?_LANG=jpjp)にまだドキュメントがないようですので、詳しいことはわかりませんが、使い方は簡単なので、いろいろな比較をしてその機能を想像してみたいと思います。

**環境**

* Automation Anywhere A2019.10 (ビルド2545)

# Fuzzy Match パッケージ
アクションパレットの中にあるFuzzy Matchパッケージからアクションリストにドラッグ＆ドロップすることで、実装が可能です。このアクションは、2つの文字列またはファイル (txt, PDF)を比較して0と1の間の数を出力として文字列型変数に格納します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/2f15f141-bff2-263f-745b-9573c75270f3.png)

よって、格納された値をMessage Boxで表示させる一連の流れを実装したBotを作成してみました。そして2つの入力文字列によって、出力される数字がどのように変わるかを見てみることにしました。

### 大文字/小文字

半角アルファベットの大文字と小文字の違いがどのように認識されるかを調べてみました。

|入力1|入力2|出力|
|:--|:--|--:|
|abc|ABC|0.0|
|Abc|ABC|0.5555555555555555|
|Force|force|0.8666666666666667|

abcとABCの出力がゼロであることから、大文字と小文字は全く別の文字としてとらえられているようですね。このことから、このロジックに渡す文字列はあらかじめ大文字か小文字かのどちらかに揃えておく必要がありそうです。

### 英語のスペル揺れ表記

アメリカ英語とイギリス英語で表記が違うものがありますが、それらがどのような値を出すのかを調べてみました。

|入力1|入力2|出力|
|:--|:--|--:|
|color|colour|0.9666666666666667|
|rumor|rumour|0.9666666666666667|
|center|centre|0.9666666666666667|
|analyze|analyse|0.9428571428571428|
|dialog|dialogue|0.95|
|maneuver|manoeuvre|0.9449074074074074|
|licence|license|0.9428571428571428|
|organize|organise|0.95|
|modeling|modelling|0.9777777777777777|
|whiskey|whisky|0.9714285714285714|
|yogurt|yoghurt|0.9666666666666667|

結果は0.94~0.98ということになりました。
これが両者の綴りの違うパターンを認識しているのか、単なる文字の違いの距離を算出しているのかについて実験してみました。両者の綴りの違うパターンにない形で比べてみるとこうなりました。

|入力1|入力2|出力|
|:--|:--|--:|
|color|coloor|0.9666666666666667|
|center|centerr|0.9714285714285714|
|modeling|modellng|0.95|

モノによっては綴りの違うパターンよりも1に近くなっているものがありますね。よって綴りの違うパターンを特別に認識しているわけではないようです。

### 日本語

一応、日本語も試してみました。

|入力1|入力2|出力|
|:--|:--|--:|
|すもも|すもう|0.8222222222222222|
|すだち|すもう|0.5555555555555555|
|ウイルス|ウィルス|0.8500000000000001|
|キャノン|キヤノン|0.8500000000000001|
|かき|カキ|0.0|
|斎藤|齋藤|0.6666666666666666|

半角英数字であっても日本語であってもパターンの違いを基に計算がされていそうなことはわかりました。文字の種類の違いによる差異はなさそうです。

# v11用はBot Storeにモジュールがある

ちなみに、Automation Anywhere Enterprise v11用には、Bot Storeで『[String Matching Fuzzy Logic](https://botstore.automationanywhere.com/bot/string-matching-fuzzy-logic/)』というMetaBotが配布されています。以下のような説明がなされています。

>**Compares the source string to the target string using the following three Distance methods and gives the percentage match in the scale of 0 to 1**

>- **Hamming** - measures the minimum number of substitutions required to change one string into the other.The Hamming distance between two strings of equal length is the number of positions at which the corresponding symbols are different
- **Levenshtein distance** - string metric for measuring the difference between two sequences. The Levenshtein distance between two words is the minimum number of single-character edits (i.e. insertions, deletions or substitutions) required to change one word into the other
- **Damerau–Levenshtein** - Distance differs from the classical Levenshtein distance by including transpositions among its allowable operations. The classical Levenshtein distance only allows insertion, deletion, and substitution operations. Modifying this distance by including transpositions of adjacent symbols produces a different distance measure

『[ハミング距離](https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E8%B7%9D%E9%9B%A2)』『[レーベンシュタイン距離](https://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2)』『[ダメラウ・レーベンシュタイン距離](https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%A1%E3%83%A9%E3%82%A6%E3%83%BB%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2)』という3つの手法が出てきます。また、このMetaBotでは、入力引数として、これらの手法のどれを使うかについて指定するものがあるようです。(他にも『ジャロ・ウィンクラー距離』などの手法があります) さて、A2019では手法を指定する引数はありませんが、どれが採用されているでしょう...

# A2019も3月1日にBot Storeに登場

米国時間3/1にA2019でもFuzzy Match Botが公開されました。形式はZIPファイルでA2019のBotファイルと同様のようです。アクションを追加できる環境が周りにないので試していないですが、ハミング距離、レーベンシュタイン距離、ダメラウ・レーベンシュタイン距離の3つで計算できるようです。権限があればBotのインポートでいけそうなかんじです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479715/79d6e6a4-9b31-6bf6-f5b2-722156cabe03.png)