Roboyo - Fuzzy Logic
2つの文字列の類似度を数値化してくれるアクティビティを紹介します!
OCR の読取結果からのマスター検索や入力ミスに対するサジェスト、簡易なQAロボ作成などに使えそうです(=゚ω゚)ノ
「Roboyo - Fuzzy Logic」
「Roboyo.fuzzy_logic.activities」(パッケージ)をインストールすると、次の4つのアクティビティが使えるようになります。
- Get Jaro Winkler Distance:ジャロ・ウィンクラー距離を計算する
- Get Levenshtein Distantce:レーベンシュタイン距離を計算する
- Get N Gram Distance:NGram 距離を計算する
- Lucene Search String:インプットの配列から検索した文字列に最も近いインデックスを返す(ルシーン検索ロジック)
素人が触った感じでは、Get Jaro Winkler Distance(ジャロ・ウィンクラー距離)の計算アクティビティが使えそうです!
利用シーンは主に入力文字列に対するマスターチェックです。
例えば
「UiPath株式会社」という登記上の正式な会社名称に対して、
「株式会社UiPath」「(株)UiPath」「UiPath」といった様々な入力がある訳ですが、
これをマスターと照らしあわせて最も確度が高いものに上書きするといったことが可能になる訳です。
(例) "UiPath株式会社" "株式会社UiPath"
(例) "UiPath株式会社" "(株)UiPath"
(例) "UiPath株式会社" "UiPath"
この結果だけをみれば、ジャロ・ウィンクラー距離で 70%以上の確度がある文字列を正として問題ないですよね!!
- ジャロ・ウィンクラー距離:文字の一致数と一致する文字の距離で値が計算される模様。
- レーベンシュタイン距離:編集距離を求めるものらしく、文字の追加・変更・削除等の多さが数値として計算されます。
- NGram 距離:ちょっと難しくてよくわからないが、最初の分割後は1文字ずつ移動して順次分割を行うみたいなので、形態素解析に近い?感じのロジックです。キーワードの出現場所が異なっても違いを吸収できることがメリットっぽい。
OCR などで、最後に残る(判子被り等での)解決不可能系の住所や宛先の問題
(例)"〒105-0011 東京都港区芝公園4丁目2−8" "105-0011 東京都港区 意図しない文字列 芝公園4-2-8"
郵便番号マークをとって、判子?の不要な文字列を住所の間に挟み、さらに入力は半角英数字といった住所で試してみました。
ジャロ・ウィンクラー距離はおよそ 75%なので、住所マスターなどを用意すれば、そちらに置き換えれば精度が上がりますよね☀
上は東京タワーの住所ですが、ディズニーランドの住所で実行すればこうです↓↓
(例) "〒105-0011 東京都港区芝公園4丁目2−8" "〒279-0031 千葉県浦安市舞浜1−1"
最後に Lucene Search String(ルシーン検索)について
(例)配列:{"a","b","c"} 検索文字列:"c"
検索ロジックにて最も近しい値を持つインデックスを返してくれます。(ロジックについては、大規模データ検索に向いてることくらいしか、パッと調べた限りわからなかった。)
(例)配列:{"Orchestrator でのデプロイ作業を教えてください","OC にロボットを登録する方法","Orchestrator でロボットを有効化する方法"} 検索文字列:"ロボットを Orchestrator で使えるようにする方法を教えてください"
→ インデックス:2 (Q:ロボットを Orchestrator で使えるようにする方法を教えてください > A:Orchestrator でロボットを有効化する方法)
いかがでしたでしょうか?
EXCEL の VLOOK などでは曖昧検索にしたとしても前方一致の世界ですが、
Roboyo - Fuzzy Logic アクティビティをもちいれば、もう一段上の検索が誰でも手元でおこなえそうですね
興味の沸いた方は https://marketplace.uipath.com/ja にアクセスして便利なコンポーネントを是非他にも探してみてください(*´Д`)