【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

Google スプレッドシートの名前付き関数でレーベンシュタイン距離

Google スプレッドシートに複雑な数式を入力すると、名前付き関数を使うように誘導されます。レーベンシュタイン距離を例に説明します。

目次

レーベンシュタイン距離

レーベンシュタイン距離は 2 つの文字列の類似度を測るのに使用されます。

以下の記事では Excel でマクロを使わずに数式で計算する方法が紹介されています。ラムダ式などを駆使した数式は画期的です。

www.officeisyours.com

「大文字と小文字を区別する場合」の式を使用します。

=CHOOSECOLS(
LET(a,SEQUENCE(1,LEN(B3)+1,0),b,SEQUENCE(LEN(C3)),c,SEQUENCE(LEN(B3)),
REDUCE(a,b,LAMBDA(a,b,
REDUCE(b,c,LAMBDA(b,c,
HSTACK(b,MIN(INDEX(a,c)+NOT(EXACT(MID(B3,c,1),MID(C3,INDEX(b,1),1))),INDEX(a,c+1)+1,INDEX(b,c)+1))
))))),
-1)

Google スプレッドシートでもそのまま利用できます。

名前付き関数

Google スプレッドシートでは数式を名前付き関数として登録できます。これにより数式として表現できるものであれば、外部スクリプトを使わずに登録できます。

forest.watch.impress.co.jp

レーベンシュタイン距離の数式を入力すると、名前付き関数を使うように誘導されます。「新しい関数を追加」をクリックします。

関数名に LEVENSHTEIN と入力します。

参照しているセルが引数の候補として提示されるためクリックします。

text1 という名前で定義します。

同様に C3 も text2 という名前で定義します。

定義した引数は登録されます。

必要事項の記入が終わったため「次へ」をクリックします。

引数の説明や例を求められますが、今回は省略して「作成」をクリックします。

名前付き関数として登録され、使用できるようになります。

関数の雛形に使ったセルは自動で置き換えられるわけではないため、手動で書き替えて動作確認します。

無事に動作しました!

注意点

数式を入力した直後に固まったようになることがありましたが、しばらく待つと動き出します。

長い文字列を大量に処理するとそこそこ時間が掛かるので、進捗バーを見ながら気長に待ちます。

関連記事

qiita.com

qiita.com