Tôi đã thấy rằng Jaro Winkler cũng tốt cho những sai lầm chính tả và sự khác biệt nhỏ giữa các chuỗi. Tôi đã sửa đổi mã này để được định hướng đối tượng:
class StringCompareJaroWinkler
{
public function compare[$str1, $str2]
{
return $this->JaroWinkler[$str1, $str2, $PREFIXSCALE = 0.1 ];
}
private function getCommonCharacters[ $string1, $string2, $allowedDistance ]{
$str1_len = mb_strlen[$string1];
$str2_len = mb_strlen[$string2];
$temp_string2 = str_split[$string2];
$commonCharacters='';
for[ $i=0; $i < $str1_len; $i++]{
$noMatch = True;
// compare if char does match inside given allowedDistance
// and if it does add it to commonCharacters
for[ $j= max[ 0, $i-$allowedDistance ]; $noMatch && $j < min[ $i + $allowedDistance + 1, $str2_len ]; $j++]{
if[ $temp_string2[$j] == $string1[$i] ]{
$noMatch = False;
$commonCharacters .= $string1[$i];
$temp_string2[$j] = '';
}
}
}
return $commonCharacters;
}
private function Jaro[ $string1, $string2 ]{
$str1_len = mb_strlen[ $string1 ];
$str2_len = mb_strlen[ $string2 ];
// theoretical distance
$distance = [int] floor[min[ $str1_len, $str2_len ] / 2.0];
// get common characters
$commons1 = $this->getCommonCharacters[ $string1, $string2, $distance ];
$commons2 = $this->getCommonCharacters[ $string2, $string1, $distance ];
if[ [$commons1_len = mb_strlen[ $commons1 ]] == 0] return 0;
if[ [$commons2_len = mb_strlen[ $commons2 ]] == 0] return 0;
// calculate transpositions
$transpositions = 0;
$upperBound = min[ $commons1_len, $commons2_len ];
for[ $i = 0; $i < $upperBound; $i++]{
if[ $commons1[$i] != $commons2[$i] ] $transpositions++;
}
$transpositions /= 2.0;
// return the Jaro distance
return [$commons1_len/[$str1_len] + $commons2_len/[$str2_len] + [$commons1_len - $transpositions]/[$commons1_len]] / 3.0;
}
private function getPrefixLength[ $string1, $string2, $MINPREFIXLENGTH = 4 ]{
$n = min[ array[ $MINPREFIXLENGTH, mb_strlen[$string1], mb_strlen[$string2] ] ];
for[$i = 0; $i < $n; $i++]{
if[ $string1[$i] != $string2[$i] ]{
// return index of first occurrence of different characters
return $i;
}
}
// first n characters are the same
return $n;
}
private function JaroWinkler[$string1, $string2, $PREFIXSCALE = 0.1 ]{
$JaroDistance = $this->Jaro[ $string1, $string2 ];
$prefixLength = $this->getPrefixLength[ $string1, $string2 ];
return $JaroDistance + $prefixLength * $PREFIXSCALE * [1.0 - $JaroDistance];
}
}
$jw = new StringCompareJaroWinkler[];
echo $jw->compare["jonas","asjon"];
❮ Tham chiếu chuỗi PHP
Thí dụ
Bài Viết NÀy Đạo Giúp ích Cho Bạn?
BÀi VIếT MớI
echo similar_text["Hello World","Hello Peter"];
?>
❮ Tham chiếu chuỗi PHP
Tính toán sự tương đồng giữa hai chuỗi và trả về các ký tự phù hợp:
Tham số
Hãy tự mình thử »
Định nghĩa và cách sử dụng The levenshtein[] function is faster than the similar_text[] function. However, the similar_text[] function will give you a more accurate result with less modifications needed.
Hàm tương tự_text [] tính toán sự giống nhau giữa hai chuỗi.
Nó cũng có thể tính toán sự giống nhau của hai chuỗi tính theo phần trăm.
Lưu ý: hàm levenshtein [] nhanh hơn hàm tương tự_text []. Tuy nhiên, hàm tương tự_text [] sẽ cho bạn một kết quả chính xác hơn với ít sửa đổi cần thiết.
Giá trị tham số | Tham số |
chuỗi2 | Sự mô tả |
chuỗi1 | Yêu cầu. Chỉ định chuỗi đầu tiên được so sánh |
Yêu cầu. Chỉ định chuỗi thứ hai được so sánh
Không bắt buộc. Chỉ định một tên biến để lưu trữ sự tương đồng tính theo phần trăm |
Giá trị trở lại: |
Nhiều ví dụ hơn
Thí dụ
Bài Viết NÀy Đạo Giúp ích Cho Bạn?
BÀi VIếT MớI
similar_text["Hello World","Hello Peter",$percent];
echo $percent;
?>
❮ Tham chiếu chuỗi PHP
❮ Tham chiếu chuỗi PHP
- Trang chủ
- Phát Triển Web
- PHP
- Ha levenshtein [] trong php
Hướng dẫn cách sử dụng ha levenshtein [] trong lập trình php
Tác dụng của ha levenshtein []
& Nbsp; ________ 3 & nbsp; hàm tính toán khoảng cách levenshtein giữa hai chuỗi. levenshtein[]
function calculates Levenshtein distance between two strings.
Bảng sau đây tóm tắt các chi tiết kỹ thuật của chức năng này.
Trả về khoảng cách Levenshtein giữa hai chuỗi đối số hoặc -1, nếu một trong các chuỗi đối số dài hơn giới hạn 255 ký tự. |
Php 4.0.1+ |
Cú pháp
Cú pháp cơ bản của chức năng & nbsp; ________ 3 & nbsp; được đưa ra với: levenshtein[]
function is given with:
levenshtein[string1, string2, cost_insert, cost_replacement, cost_delete];[string1, string2, cost_insert, cost_replacement, cost_delete];
Ở dạng đơn giản nhất, hàm sẽ chỉ lấy hai chuỗi làm tham số và sẽ chỉ tính toán số lượng các thao tác chèn, thay thế và xóa cần thiết để biến đổi & nbsp; String1 & nbsp; thành & nbsp; String2. string1 into string2.
Ví dụ sau đây cho thấy & nbsp; ________ 3 & nbsp; chức năng đang hoạt động. levenshtein[]
function in action.
Thí dụ
Mẹo: & nbsp; hàm & nbsp; ________ 3 & nbsp; hàm nhanh hơn & nbsp; ________ 7 & nbsp; hàm. Tuy nhiên, & nbsp; ________ 7 & nbsp; cung cấp kết quả tốt hơn với ít sửa đổi hơn. The levenshtein[]
function is faster than the similar_text[]
function. However, similar_text[]
provides
better results with less modifications.
Lưu ý: & nbsp; Khoảng cách levenshtein được định nghĩa là số lượng ký tự tối thiểu bạn phải thay thế, chèn hoặc xóa để biến đổi & nbsp; String1 & nbsp; vào & nbsp; String2. Độ phức tạp của thuật toán là & nbsp; ____ 9, trong đó n và m là độ dài của & nbsp; String1 & nbsp; và & nbsp; String2. The Levenshtein distance is defined as the minimum number of characters you have to replace, insert or delete to transform string1 into string2. The complexity of the algorithm is O[m*n]
, where n and m are the length of string1 and string2.
Thông số
Hàm & nbsp; ________ 3 & nbsp; chấp nhận các tham số sau. levenshtein[]
function accepts the following parameters.
chuỗi1 | Yêu cầu. Chỉ định chuỗi đầu tiên được đánh giá cho khoảng cách Levenshtein. |
chuỗi2 | Yêu cầu. Chỉ định chuỗi thứ hai được đánh giá cho khoảng cách Levenshtein. |
Cost_insert | Không bắt buộc. Xác định chi phí chèn. |
chi phí | Không bắt buộc. Xác định chi phí thay thế. |
chi phí_delete | Không bắt buộc. Xác định chi phí xóa. |
Nhiều ví dụ hơn
Dưới đây là một số ví dụ khác cho thấy How & nbsp; ________ 3 & nbsp; chức năng thực sự hoạt động: levenshtein[]
function actually works:
Ví dụ sau đây cho thấy cách tìm kiếm trận đấu gần nhất của một từ sai chính tả bên trong một mảng các từ. Bạn có thể điều chỉnh độ nhạy của kết quả theo nhu cầu của bạn.
Thí dụ