CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết trên blog CFSDN này PHP cải thiện hàmsimilar_text() và levenshtein() để tính toán độ tương tự chuỗi được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
tương tự_text()Phiên bản ký tự Trung Quốc.
。
Sao chép mã Mã này như sau:
// Tách chuỗi
hàm split_str($str) {
preg_match_all("/./u", $str, $arr);
trả về $arr[0];
}
// phát hiện sự giống nhau
hàm similar_text_cn($str1, $str2) {
$arr_1 = mảng_unique(split_str($str1));
$arr_2 = mảng_unique(split_str($str2));
$similarity = count($arr_2) - count(array_diff($arr_2, $arr_1));
trả về $similarity;
}
。
levenshtein() phiên bản ký tự Trung Quốc.
。
Sao chép mã Mã này như sau:
// Tách chuỗi
hàm mbStringToArray($string, $encoding = 'UTF-8') {
$arrayResult = mảng();
trong khi ($iLen = mb_strlen($string, $encoding)) {
mảng_đẩy($arrayResult, mb_substr($string, 0, 1, $encoding));
$string = mb_substr($string, 1, $iLen, $encoding);
}
trả về $arrayResult;
}
//chỉnh sửa khoảng cách
hàm levenshtein_cn($str1, $str2, $costReplace = 1, $encoding = 'UTF-8') {
$count_same_letter = 0;
$d = mảng();
$mb_len1 = mb_strlen($str1, $encoding);
$mb_len2 = mb_strlen($str2, $encoding);
$mb_str1 = mbStringToArray($str1, $encoding);
$mb_str2 = mbStringToArray($str2, $encoding);
cho ($i1 = 0; $i1 <= $mb_len1; $i1++) {
$d[$i1] = mảng();
$d[$i1][0] = $i1;
}
đối với ($i2 = 0; $i2 <= $mb_len2; $i2++) {
$d[0][$i2] = $i2;
}
cho ($i1 = 1; $i1 <= $mb_len1; $i1++) {
đối với ($i2 = 1; $i2 <= $mb_len2; $i2++) {
// $cost = ($str1[$i1 - 1] == $str2[$i2 - 1]) ? 0 : 1;
nếu ($mb_str1[$i1 - 1] === $mb_str2[$i2 - 1]) {
$chi phí = 0;
$count_same_letter++;
} khác {
$chi phí = $costReplace; //Thay thế
}
$d[$i1][$i2] = min($d[$i1 - 1][$i2] + 1, //chèn
$d[$i1][$i2 - 1] + 1, //Xóa
$d[$i1 - 1][$i2 - 1] + $chi phí);
}
}
trả về $d[$mb_len1][$mb_len2];
//trả về mảng('khoảng cách' => $d[$mb_len1][$mb_len2], 'count_same_letter' => $count_same_letter);
}
Dãy con chung dài nhất LCS().
Sao chép mã Mã này như sau:
//Phiên bản tiếng Anh của dãy con chung dài nhất
hàm 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 = mảng();
đối với ($i = 0; $i <= $len; $i++) {
$dp[$i] = mảng();
$dp[$i][0] = 0;
$dp[0][$i] = 0;
}
đối với ($i = 1; $i <= $len_1; $i++) {
cho ($j = 1; $j <= $len_2; $j++) {
nếu ($str_1[$i - 1] == $str_2[$j - 1]) {
$dp[$i][$j] = $dp[$i - 1][$j - 1] + 1;
} khác {
$dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
}
}
}
trả về $dp[$len_1][$len_2];
}
// Tách chuỗi
hàm mbStringToArray($string, $encoding = 'UTF-8') {
$arrayResult = mảng();
trong khi ($iLen = mb_strlen($string, $encoding)) {
mảng_đẩy($arrayResult, mb_substr($string, 0, 1, $encoding));
$string = mb_substr($string, 1, $iLen, $encoding);
}
trả về $arrayResult;
}
//Phiên bản tiếng Trung của dãy con chung dài nhất
hàm 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 = mảng();
đối với ($i = 0; $i <= $len; $i++) {
$dp[$i] = mảng();
$dp[$i][0] = 0;
$dp[0][$i] = 0;
}
đối với ($i = 1; $i <= $mb_len1; $i++) {
đối với ($j = 1; $j <= $mb_len2; $j++) {
nếu ($mb_str1[$i - 1] == $mb_str2[$j - 1]) {
$dp[$i][$j] = $dp[$i - 1][$j - 1] + 1;
} khác {
$dp[$i][$j] = $dp[$i - 1][$j] > $dp[$i][$j - 1] ? $dp[$i - 1][$j] : $dp[$i][$j - 1];
}
}
}
trả về $dp[$mb_len1][$mb_len2];
}
Cuối cùng, bài viết này về các hàm cải tiến của PHPsimilar_text() và levenshtein() để tính toán độ tương tự chuỗi sẽ kết thúc tại đây. tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!