Google Spread Sheet で、2つの集合の あるカラムから似ている文字列を抽出する必要があり、文字列の検索方法、補完方法について調べたので、調べた結果を記載します。
似ている文字列を調べる方法
一般的な検索方法
以下の方法があります。
-
完全一致
文字列が完全に一致するかを判定する方法です。 -
部分一致
SQL でいうとlike '%xx%'
による比較でヒットするデータを抽出する方法です。
RDB の場合、index が効きません。 -
前方一致
SQL でいうとlike '%xx'
による 比較でヒットするデータを抽出する方法です。
RDB の場合、index が効きます。 -
後方一致
SQL でいうとlike 'xx%'
による比較でヒットするデータを抽出する方法です。 -
文字列同士の距離の比較
ルーベンシュタイン距離
、ジャロ・ウィンクラー距離
という距離の求め方があります。
この記事では、文字列の距離について記載します。
Google スプレッドシート での関数
-
完全一致
完全一致の判定はEXACT
を 使用すると実現できます。 -
部分一致
一部 ワイルドカード*
が使用可能な式があり、その式を使用すると実現できます。 -
前方一致
部分一致と同じ式で*xxx
指定することで実現できます。 -
後方一致
部分一致と同じ式でxxx*
指定することで実現できます。 -
文字列同士の距離の比較
ルーベンシュタイン距離を計算する Function を作成している方がいました。mlemos/lev-dis-google-sheets: Levenshtein Distance (Edit Distance) function for Google Sheets をコンテナバインドスクリプトとして登録すれば、式としても使用することができます。
テキストの補正
検索、一致と対になる処理で、テキストの補正があります。
一般的な補正の方法
-
全角半角変換
半角または、全角をどちらかに統一します。 -
大文字小文字変換
大文字または、小文字をどちらかに統一します。 -
全角、半角スペースの置換
全角、半角スペースをどちらかに置換、またはなかったことにします。
全角半角変換
を行っていれば実施は不要かもしれません。 -
名寄せ
(株)
を株式会社
に置換する 等の処理を行います。
別名、俗称を正式名称に変換する等です。
Google スプレッドシート での式の説明
-
全角半角変換 (半角 > 全角変換)
半角 > 全角変換を行う Excel でいうJIS
関数は 2018年9月時点では Google Spread Sheet にはありません。
ただ、function を公開してくれている方がいて、部分的には変換が可能です。 -
全角半角変換 (全角 > 半角変換)
全角 > 半角変換は、ASC
関数で実現することができます。 -
大文字小文字変換 (大文字 > 小文字変換)
大文字 > 小文字変換は、LOWER
で実現できます。 -
大文字小文字変換 (小文字 > 大文字変換)
小文字 > 大文字変換は、UPPER
で実現できます。 -
大文字小文字変換 (先頭の文字のみ大文字化)
他、先頭の一文字だけを大文字に変換するPROPER
という関数があります。 -
全角、半角スペースの置換
これは、ASC で全角スペース > 半角スペースの置換は実現できます。 -
名寄せ
REGEXEXTRACT
、REGEXREPLACE
、REPLACE
、SUBSTITUTE
を使って実現できます。
参考
以下、記事作成時に参考にした 文書のリンク集です。
テキストの編集距離に関することが多いです。
ルーベンシュタイン距離
- Javascriptでレーベンシュタイン距離の実演
- javascriptで実装された編集距離 (レーベンシュタイン距離, Levenshtein Distance)を検証してみました。 - @camelmasaの開発日記
- 文字列間のレーベンシュタイン距離を求める | blog.PanicBlanket.com
残存エラー率
調査した文脈を忘れてしまいましたが、ルーベンシュタイン距離で見つかった記事だと思います。
文字列の距離について
スプレッドシート の関数
テキスト関連の関数リストに絞り込むと、文字の検索に関わる式が表示されます。
Python
Python の difflib 文字列の編集距離を計算できます。
JavaScript difflib の実装
JavaScript の difflib 実装です。
-
cemerick/jsdifflib: A javascript library for diffing text and generating corresponding HTML views
-
Lodashを使って2つのオブジェクトのDiffを抽出する - tacamy–log
Lodash で diff を検出します。 文字列のそれではないです。
Jaro-Winkler 距離 JavaScirpt での実装
Jaro-Winkler 距離 を求める JavaScript です。Browser で動作するライブラリであれば、基本的に Google Apps Script としても動作します。
-
jaro-winkler-JS/jaro_winkler.js at master · thsig/jaro-winkler-JS
-
shannonarcher/jarowinkler-js: Approximate string comparison using Jaro-Winkler distance formula.
以上です。
コメント