PHP 2つの文字列の距離を調べるレーベンシュタイン距離 levenshtein()
スポンサーリンク
2つの文字列がどの程度異なっているかを調べる方法としてレーベンシュタイン距離があります。
これは、文字の挿入や削除、置換によって、ある文字列を別の文字列に変形するのに必要な手順の最小回数です。
hogeとhogeはまったく同じなのでレーベンシュタイン距離は0です。
hogeとhoge2は1文字増えてるのでレーベンシュタイン距離は1です。
3hogeとhogeは1文字増えてるのでレーベンシュタイン距離は1です。
PHPには、このレーベンシュタイン距離を計算するための関数
levenshtein()が用意されています。
サンプルコード
実行結果
レーベンシュタイン距離の小さいものを「もしかして」とサジェスト(提案)してあげる機能を実装するときなどに使えそうです。
あとは、ユーザのパスワードを更新させたいときに、前のパスワードに近いパスワードを許可しないために、前のパスワードと新しいパスワードの比較をするときなどに利用できます。
セキュリティ対策としてよくある、ユーザのIDとパスワードが似通ってるものは許さないようにするという実装をしたいなら、ユーザIDとパスワードの比較をしてレーベンシュタイン距離が近いものは許さないようにしたりするのもいいかもしれません。
これは、文字の挿入や削除、置換によって、ある文字列を別の文字列に変形するのに必要な手順の最小回数です。
hogeとhogeはまったく同じなのでレーベンシュタイン距離は0です。
hogeとhoge2は1文字増えてるのでレーベンシュタイン距離は1です。
3hogeとhogeは1文字増えてるのでレーベンシュタイン距離は1です。
PHPには、このレーベンシュタイン距離を計算するための関数
levenshtein()が用意されています。
サンプルコード
<?php function test_levenshtein($str1, $str2) { $r = levenshtein($str1, $str2); echo "[$str1] [$str2] = $r\n"; } test_levenshtein("hoge","hoge"); test_levenshtein("hoge","hage"); test_levenshtein("hoge","hoge2"); test_levenshtein("1hoge","hoge"); test_levenshtein("oldpasswd","newpasswd"); test_levenshtein("hoge23","hoge45"); test_levenshtein("google.com","google.co.jp"); test_levenshtein("yahoo.com","google.com"); ?>
実行結果
[hoge] [hoge] = 0 [hoge] [hage] = 1 [hoge] [hoge2] = 1 [1hoge] [hoge] = 1 [oldpasswd] [newpasswd] = 3 [hoge23] [hoge45] = 2 [google.com] [google.co.jp] = 3 [yahoo.com] [google.com] = 6
レーベンシュタイン距離の小さいものを「もしかして」とサジェスト(提案)してあげる機能を実装するときなどに使えそうです。
あとは、ユーザのパスワードを更新させたいときに、前のパスワードに近いパスワードを許可しないために、前のパスワードと新しいパスワードの比較をするときなどに利用できます。
セキュリティ対策としてよくある、ユーザのIDとパスワードが似通ってるものは許さないようにするという実装をしたいなら、ユーザIDとパスワードの比較をしてレーベンシュタイン距離が近いものは許さないようにしたりするのもいいかもしれません。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12