この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
Snowflakeには定期的に新しい関数が追加されていますが、今回は「JAROWINKLER_SIMILARITY」という面白い関数を見つけたので試してみようと思います。
なお、この関数は下記のドキュメントに記載のとおりバージョン「6.8」で導入されたようです。
前提
今回検証した環境はSnowflakeの下記バージョンの環境となります。
SELECT CURRENT_VERSION();
+-------------------+
| CURRENT_VERSION() |
|-------------------|
| 6.17.0 |
+-------------------+
ジャロ・ウィンクラー類似度(距離)とは?
今回試してみる関数のドキュメントはこちらです。
解説に記載のある通り、この関数は2つの文字列の類似度を0〜100(100が完全一致)返してくれる関数です。また、大文字と小文字については区別がされません。
この処理の細かい定義については数学的な話になるようですが、ざっくりとは「2つの文字列の先頭部分が一致していると、より類似度が高い」と判断されるロジックのようです。
また、用途としては文章内での単語の類似度から「タイピングミス」や「表記揺れ」を検出するために活用されるようです。
では早速、実際に試してみたいと思います。
試してみた
まずは、自分自身の名前のootaka
同士を試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','ootaka');
+-------------------------------------------+
| JAROWINKLER_SIMILARITY('OOTAKA','OOTAKA') |
|-------------------------------------------|
| 100 |
+-------------------------------------------+
これは同じ文字なので100
になりますね。全く違う文字列でも試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','z');
+--------------------------------------+
| JAROWINKLER_SIMILARITY('OOTAKA','Z') |
|--------------------------------------|
| 0 |
+--------------------------------------+
これは全く違う文字列なので0
で納得です。
では次に、同じ部にいらっしゃる、たまにチャットの通知先などで間違えられることのあるootakiさんで試してみます。
SELECT JAROWINKLER_SIMILARITY('ootaka','ootaki');
+-------------------------------------------+
| JAROWINKLER_SIMILARITY('OOTAKA','OOTAKI') |
|-------------------------------------------|
| 93 |
+-------------------------------------------+
納得の93
ですね。私もたまに間違えそうになります。
今度は日本語でも試してみます。
SELECT JAROWINKLER_SIMILARITY('おおたかだいすけ','おおたかの森');
+-----------------------------------------------------------+
| JAROWINKLER_SIMILARITY('おおたかだいすけ','おおたかの森') |
|-----------------------------------------------------------|
| 83 |
+-----------------------------------------------------------+
SELECT JAROWINKLER_SIMILARITY('おおたかだいすけ','おおさかだいすき');
+---------------------------------------------------------------+
| JAROWINKLER_SIMILARITY('おおたかだいすけ','おおさかだいすき') |
|---------------------------------------------------------------|
| 86 |
+---------------------------------------------------------------+
感覚的に「まあまあ似てるんじゃない?」と思われる文字は、高い値を出しますね。(面白いですね)
まとめ
以上、Snowflakeの「JAROWINKLER_SIMILARITY」関数を試してみました。
個人的に面白い関数だと思うので、なにか機会があったときに利用できたらと思います。
どなたかのお役に立てば幸いです。それでは!