ホームページ > バックエンド開発 > PHPチュートリアル > PHP は、文字列の類似性を計算するための関数 minimum_text() と levenshtein() を改善しました、levenshtein_PHP チュートリアル

PHP は、文字列の類似性を計算するための関数 minimum_text() と levenshtein() を改善しました、levenshtein_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:15:51
オリジナル
1197 人が閲覧しました

PHP は、文字列の類似性を計算するための関数 simple_text()、levenshtein()、levenshtein

を改善しました

similar_text() 漢字バージョン

コードをコピーします コードは次のとおりです:

//文字列を分割します
関数 split_str($str) {
Preg_match_all("/./u", $str, $arr); 戻り $arr[0]; }

//類似点検出
関数類似テキスト_cn($str1, $str2) {
$arr_1 = array_unique(split_str($str1)); $arr_2 = array_unique(split_str($str2)); $similarity = count($arr_2) - count(array_diff($arr_2, $arr_1));                                        $similarity を返します
}




レーベンシュタイン()漢字バージョン


コードをコピーします

コードは次のとおりです:


          //拆分字符串
     function mbStringToArray($string, $encoding = 'UTF-8') {
         $arrayResult = array(); 
         while ($iLen = mb_strlen($string, $encoding)) {
             array_push($arrayResult, mb_substr($string, 0, 1, $encoding)); 
             $string = mb_substr($string, 1, $iLen, $encoding); 
         }
         $arrayResult を返します。 
     }
     //编辑距離
     function levenshtein_cn($str1, $str2, $costReplace = 1, $encoding = 'UTF-8') {
         $count_same_letter = 0; 
         $d = 配列(); 
         $mb_len1 = mb_strlen($str1, $encoding); 
         $mb_len2 = mb_strlen($str2, $encoding); 
         $mb_str1 = mbStringToArray($str1, $encoding); 
         $mb_str2 = mbStringToArray($str2, $encoding); 
         for ($i1 = 0; $i1 <= $mb_len1; $i1++) {
             $d[$i1] = 配列(); 
             $d[$i1][0] = $i1; 
         }
         for ($i2 = 0; $i2 <= $mb_len2; $i2++) {
             $d[0][$i2] = $i2; 
         }
         for ($i1 = 1; $i1 <= $mb_len1; $i1++) {
             for ($i2 = 1; $i2 <= $mb_len2; $i2++) {
                 // $コスト = ($str1[$i1 - 1] == $str2[$i2 - 1]) ? 0:1; 
                 if ($mb_str1[$i1 - 1] === $mb_str2[$i2 - 1]) {
                     $コスト = 0; 
                     $count_same_letter++; 
                 } その他 {
                     $コスト = $コスト交換; //代替换
                 }
                 $d[$i1][$i2] = min($d[$i1 - 1][$i2] + 1, //插入
                 $d[$i1][$i2 - 1] + 1, //删除
                 $d[$i1 - 1][$i2 - 1] + $cost); 
             }
         }
         $d[$mb_len1][$mb_len2]を返します; 
         //return array(' distance' => $d[$mb_len1][$mb_len2], 'count_same_letter' => $count_same_letter); 
     }


最大パブリック子シーケンスLCS()

 
复制代码代码如下:

                  //最長の公開子配列英文版
         関数 LCS_en($str_1, $str_2) {
           $len_1 = strlen($str_1); 
           $len_2 = strlen($str_2); 
           $len = $len_1 > $len_2 ? $len_1 : $len_2; 
           $dp = 配列(); 
           for ($i = 0; $i              $dp[$i] = 配列(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           }
           for ($i = 1; $i              for ($j = 1; $j                if ($str_1[$i - 1] == $str_2[$j - 1]) {
                 $dp[$i][$j] = $dp[$i - 1][$j - 1] + 1; 
               } その他 {
                 $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1]; 
               }
             }
           }
           $dp[$len_1][$len_2]を返します; 
         }
         //拆分字符串
         function mbStringToArray($string, $encoding = 'UTF-8') {
           $arrayResult = array(); 
           while ($iLen = mb_strlen($string, $encoding)) {
             array_push($arrayResult, mb_substr($string, 0, 1, $encoding)); 
             $string = mb_substr($string, 1, $iLen, $encoding); 
           }
           $arrayResult を返します。 
         }
         //最長のパブリック子配列中文版
         関数 LCS_cn($str1, $str2, $encoding = 'UTF-8') {
           $mb_len1 = mb_strlen($str1, $encoding); 
           $mb_len2 = mb_strlen($str2, $encoding); 
           $mb_str1 = mbStringToArray($str1, $encoding); 
           $mb_str2 = mbStringToArray($str2, $encoding); 
           $len = $mb_len1 > $mb_len2 ? $mb_len1 : $mb_len2; 
           $dp = 配列(); 
           for ($i = 0; $i              $dp[$i] = 配列(); 
             $dp[$i][0] = 0; 
             $dp[0][$i] = 0; 
           }
           for ($i = 1; $i for ($j = 1; $j If ($mb_str1[$i - 1] == $mb_str2[$j - 1]) {
$dp[$i][$j] = $dp[$i - 1][$j - 1] + 1;                                                                                                         $dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? : $dp[$i][$j - 1];                                                                                                                                                                                                                                                                    $dp[$mb_len1][$mb_len2] を返します
}






(100 点)[php]よく知っている文字列処理関数をいくつか書いてみましょう!

addcslashes addlashes bin2hex チョップ chr chunk_split Convert_cyr_string キリル文字

convert_uudecode Convert_uuencode count_chars crc32 crc32 crypt echoexplode
fprintf get_html_translation_table hebrev
hebrevc

hex2bin — hexa をデコードします10 進数でエンコードされたバイナリ文字列
html_entity_decode — すべての HTML エンティティを該当する文字に変換します
htmlentities — 変換該当するすべての文字を HTML エンティティに変換します
htmlspecialchars_decode — 特殊な HTML エンティティを文字に変換します
htmlspecialchars — 特殊文字を HTML エンティティに変換します
implode — 配列要素を文字列で結合します
join

lcfirst — 文字列の最初の文字を小文字にする
levenshtein — 計算します2 つの文字列間のレーベンシュタイン距離
localeconv — 数値書式設定情報を取得します
ltrim — 文字列の先頭から空白 (または他の文字) を削除します
md5_file
metaphone — 文字列のメタフォン キーを計算します
money_format — 数値を通貨文字列として書式設定します
nl_langinfo — 言語とロケール情報をクエリする
nl2br

number_format — 数値をグループ化してフォーマットする
ord

parse_str

print

printf

quoted_printable_decode — quote-printable 文字列を 8 ビット文字列に変換する
quote d_printable_encode — 変換8ビット文字列を引用符付き印刷可能な文字列に変換
quotemeta — メタ文字を引用
rtrim
setlocale — ロケール情報を設定
sha1_file

sha1

soundex — 文字列のsoundexキーを計算
sprintf — フォーマットされた文字列を返す
sscanf —文字列からの入力を次に従って解析します...残りのテキスト>>




PHPのlevenshtein関数について分かりやすく説明して頂けませんか

W3School の説明:

levenshtein() 関数は 2 つの文字列間のレーベンシュタイン距離を返します。
編集距離とも呼ばれるレーベンシュタイン距離は、2 つの文字列を一方の文字列からもう一方の文字列に変換するために必要な編集操作の最小数を指します。許可される編集操作には、ある文字を別の文字に置き換える、文字を挿入する、文字を削除するなどがあります。
子猫を座る状態に変換する例:
sitten (k→s)
sittin (e→i)

sitting (→g)
levenshtein() 関数は、各操作 (置換、挿入、削除) に等しい重みを与えます。ただし、オプションの挿入、置換、および削除パラメータを設定することで、各操作のコストを定義できます。

説明: 「コスト」は重みです。投稿者の例では、Hello World → ello World では、「H」を「削除」する必要があります。つまり、5 番目のパラメーターが使用され、対応する重みが 30 であるため、30 が返されます。





http://www.bkjia.com/PHPjc/901291.html
www.bkjia.com

tru​​e

技術記事 PHP は、文字列の類似性を計算する関数類似テキスト() と levenshtein() を改善しました。levenshtein の類似テキスト() の中国語版は、次のようにコードをコピーします。 php //文字列分割関数 split...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート