表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

2/3

ブラウザでJavaScriptでレーベンシュタイン距離を計算する(JavaScriptと)HTMLのコード

 「レーベンシュタイン距離」は全ての種類の文字に対して利用できます。

 「正規化されたレーベンシュタイン距離」が小さいほど、2つの文字は似ています。


 ちなみに、「レーベンシュタイン距離」は文字数に比例して大きくなるので、「レーベンシュタイン距離」を2つの文字の文字数のうち大きい方で割った「正規化されたレーベンシュタイン距離」を利用します。

 「正規化されたレーベンシュタイン距離」は0以上1以下の実数に収まります。


 Githubで(JavaScriptと)HTMLのソース コードをパブリック ドメインで公開しております。

 マイクロソフトのBing検索エンジンで「github eliphas1810-tools」などで検索してみてください。

 残念ながらグーグル検索エンジンでは検索できません。


 不具合が有るかもしれないので利用は自己責任でお願いいたします。


 2024年7月31日時点の最新のChromeとFirefoxで動作を確認しました。


 コピーする場合は、2文字の全角空白を4文字の半角空白に置換してください。

<!DOCTYPE html>

<html lang="ja">

  <head>

    <meta charset="UTF-8" />

    <title>レーベンシュタイン距離の計算</title>

  </head>

  <body>

    <div>

      <input type="text" id="firstString" size="80"></input>

    </div>

    <br />

    <div>

      <input type="text" id="secondString" size="80"></input>

    </div>

    <br />

    <div>

      <button type="button" id="calculateLevenshteinDistance">レーベンシュタイン距離を計算</button>

    </div>

    <br />

    <p id="message"></p>

    <br />

    <p> レーベンシュタイン距離: <span id="levenshteinDistance"></span>

    </p>

    <br />

    <p> 2つの文字の文字数のうち最大文字数で割って0以上1以下に正規化されたレーベンシュタイン距離: <span id="normalizedLevenshteinDistance"></span>

    </p>

    <br />

    <p> ※レーベンシュタイン距離と、正規化されたレーベンシュタイン距離は、小さいほど、2つの文字は似ています。</p>



    <script>



function $(id) {

  return document.getElementById(id);

}



//レーベンシュタイン距離を計算

function calculateLevenshteinDistance(firstString, secondString) {


  var maxX = firstString.length;


  var maxY = secondString.length;


  var table = [];


  for (var x = 0; x <= maxX; x++) {

    table[x] = [];

    table[x][0] = x;

  }


  for (var y = 0; y <= maxY; y++) {

    table[0][y] = y;

  }


  for (var x = 1; x <= maxX; x++) {

    for(var y = 1; y <= maxY; y++) {


      var cost = null;

      if (firstString.charAt(x - 1) == secondString.charAt(y - 1)) {

        cost = 0;

      } else {

        cost = 1;

      }


      table[x][y] = Math.min(

        table[x - 1][y] + 1,

        table[x][y - 1] + 1,

        table[x - 1][y - 1] + cost

      );

    }

  }


  return table[maxX][maxY];

}



//2つの文字の文字数のうち最大文字数で割って、0以上1以下に正規化されたレーベンシュタイン距離を計算

function normalizeLevenshteinDistance(firstString, secondString) {


  //レーベンシュタイン距離を計算

  var levenshteinDistance = calculateLevenshteinDistance(firstString, secondString);


  return (levenshteinDistance / Math.max(firstString.length, secondString.length));

}



$("calculateLevenshteinDistance").onclick = function () {


  $("message").innerHTML = "";


  $("levenshteinDistance").innerHTML = "";


  $("normalizedLevenshteinDistance").innerHTML = "";


  var firstString = $("firstString").value;

  var secondString = $("secondString").value;


  if (firstString.length <= 0 || secondString.length <= 0) {

    $("message").innerHTML = " 1文字以上の2つの文字を入力してください。";

    return;

  }


  $("levenshteinDistance").innerHTML = calculateLevenshteinDistance(firstString, secondString);


  $("normalizedLevenshteinDistance").innerHTML = normalizeLevenshteinDistance(firstString, secondString);

};



    </script>

  </body>

</html>

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ