levenshtein() は PHP の組み込み関数で、2 つの文字列と比較してレーベンシュタイン距離と呼ばれる距離の単位を決定するために使用されます。レーベンシュタイン距離の定義は、入力文字列を置換、挿入、削除して別の文字列に変換するなど、変更される文字の総数を表します。
広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
PHP ではデフォルトで、上記の 3 つの変更 (置換、削除、挿入) のすべてに同じ重みが与えられます。ただし、上記のオプションのパラメーターを指定することで、これらの各操作のコストまたは重みを入力するオプションがあります。この関数に使用されるアルゴリズムの複雑さは O(a*b) です。ここで、a と b はそれぞれ文字列 str1 と str2 の長さです。
この関数には注意すべき点がいくつかあります:
ここでは構文とパラメータについて説明します。
構文:
levenshtein(str1,str2,insert,replace,delete)
パラメータ:
最後の 3 つのパラメータすべてのデフォルト値は 1 です。
戻り値: この関数は、2 つの入力文字列間のレーベンシュタイン距離を出力します。文字列の合計文字数が 1 つでも 255 を超える場合は、値 -1 を返します。
レーベンシュタイン関数の働きを理解するために、いくつかの例を見てみましょう。
コード:
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'rdo'; $s2 = 'rst'; print_r(levenshtein($s1, $s2)); ?>
出力:
これは、2 つの入力文字列 s1 と s2 に、それぞれ 3 つの異なる文字で構成される 1 つの単語が含まれる基本的な例です。ここで、levenshtein 関数はこれら 2 つの文字列を 1 文字ずつ比較し、文字数の違いを見つけます。ここでは、3 つの文字のうち共通していない文字が 2 つあります。そのため、最初の文字列を 2 番目の文字列と同じにするには、「s,t」の 2 文字を追加する必要があるため、出力は 2 になります。
コード:
<?php // PHP code to determine levenshtein distance // between 2 strings $s1 and $s2 $s1 = 'first string'; $s2 = 'second string'; print_r(levenshtein($s1, $s2)); ?>
出力:
この基本的な例では、s1 と s2 で表される 2 つの入力文字列間のレーベンシュタイン距離を見つけることができます。 2 つの文字列の文字を比較すると、共通する単語が 1 つあることがわかります。 "弦"。そして残りの単語では、「最初」の単語と「2 番目」の単語、および一般的な単語「文字列」と比較します。ここで、共通していない文字は「f、e、c、o、d」と余分な「s」だけです。したがって、levenshtein 関数は出力を 6 として返します。これは、これら 6 文字がこれら 2 つの入力文字列の差であり、これを使用してこれら 2 つの文字列を文字の点で等しくできることを意味します。
コード:
<?php // PHP code to determine levenshtein distance // between $s1 and $s2 $s1 = 'Common Three Words'; $s2 = 'Common Words'; echo("The Levenshtein distance is: "); print_r(levenshtein($s1, $s2)); ?>
出力:
この例では、最初の文字列には 3 つの単語が含まれているのに対し、2 番目の文字列には 2 単語しか含まれていないことがわかります。そして、2 番目の文字列にあるこれら 2 つの単語は両方とも、最初の文字列にすでに存在していることがわかります。したがって、ここでの文字の唯一の違いは、「Three」という単語が 5 文字であることになります。ここで興味深いことに、出力では 6 が得られます。これは、余分なスペースも文字として考慮されることを意味します。
<?php // Giving a misspelled word as input $ip = 'giraffee'; // sample set array to compare with $word_list = array('cat','dog','cow','elephant', 'giraffe','eagle','pigeon','parrot','rabbit'); // Since shortest distance is not found yet $short = -1; // Looping through array to find the closest word foreach ($word_list as $word_list) { // Calculating the levenshtein distance between // input word and the current word $levn = levenshtein($ip, $word_list); // To check for the matching word if ($levn == 0) { // This is the closest one which is an perfect match $closest = $word_list; $short = 0; // Here we break from foreach loop // when the exact match is found break; } // When the distance shown here is less than shortest distance // found in next iteration or if the next shortest word is // yet to be found if ($levn <= $short || $short < 0) { // Setting the shortest distance and one having // closest match to the input word $close = $word_list; $short = $levn; } } echo "Input word: $ip\n"; if ($short == 0) { echo "The closest/exact match found to the input word is: $close\n"; } else { echo "Did you mean to spell: $close?\n"; } ?>
出力:
上の例は、このレーベンシュタイン関数を実装できるさまざまなケースの 1 つを示しています。ここでは、正しい単語のリストを含む事前定義された配列のセットと比較することで、ユーザーがスペルミスのある単語を修正できるようにしています。
したがって、最初に、通常はスペルミスであるユーザーからの入力単語 (giraffee) を受け入れます。示されているように、入力単語 (キリン) の正しいスペルも含む正しい動物名の配列セットを定義しています。 foreach ループは、配列リストを反復処理し、入力に一致する最も近い単語を見つけるために使用されます。これは、levenshtein 関数の助けを借りて行われます。完全一致または最も近いものが見つかると、ループが中断されます。最後に、距離を short パラメーターと比較します。距離が 0 の場合、入力単語に完全一致が見つかったことを意味し、出力に出力されます。
基本的に、levenshtein 関数は、与えられた 2 つの入力文字列を 1 文字ずつ比較することによって返された距離を整数値で返します。最初の 2 つのパラメータは必須の入力文字列で、最後の 3 つのパラメータはオプションで、削除、挿入、または置換操作のコストを表します。
以上がPHP レーベンシュタイン()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。