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]よく知っている文字列処理関数をいくつか書いてみましょう!
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関数について分かりやすく説明して頂けませんか
子猫を座る状態に変換する例:
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
true
http://www.bkjia.com/PHPjc/901291.html技術記事 PHP は、文字列の類似性を計算する関数類似テキスト() と levenshtein() を改善しました。levenshtein の類似テキスト() の中国語版は、次のようにコードをコピーします。 php //文字列分割関数 split...。