int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )
A função levenshtein, é uma função bastante interessante do PHP. Ela é capaz de calcular o numero de inserções, remoções e substituições necessárias para tornar a str1 na str2.
A função serviu como base de inspiração para várias ferramentas e serviços vistos e utilizados de maneira frequente na Internet; corretores ortográficos, o famoso “Did you mean” ou “Você quis dizer” do Google estão todos inclusos nesta lista.
Abaixo segue um exemplo da implementação do famoso “Did you mean” encontrado no próprio manual, utilizando a dita-cuja:
[php]
<?php
// input misspelled word
$input = ‘carrrot’;
// array of words to check against
$words = array(‘apple’,’pineapple’,’banana’,’orange’,
‘radish’,’carrot’,’pea’,’bean’,’potato’);
// no shortest distance found, yet
$shortest = -1;
// loop through words to find the closest
foreach ($words as $word) {
// calculate the distance between the input word,
// and the current word
$lev = levenshtein($input, $word);
// check for an exact match
if ($lev == 0) {
// closest word is this one (exact match)
$closest = $word;
$shortest = 0;
// break out of the loop; we’ve found an exact match
break;
}
// if this distance is less than the next found shortest
// distance, OR if a next shortest word has not yet been found
if ($lev <= $shortest || $shortest < 0) {
// set the closest match, and shortest distance
$closest = $word;
$shortest = $lev;
}
}
echo "Input word: $input\n";
if ($shortest == 0) {
echo "Exact match found: $closest\n"";
} else {
echo "Did you mean: $closest?\n";
}
?>
[/php]
Saída
Input word: carrrot Did you mean: carrot?
Espero que um dia seja útil para alguém!
Igor,
[]’s
Tem um trecho errado no codigo:
if ($lev 0) {
seria:
if ($lev <= $shortest || $shortest < 0) {
ou
if ($lev <= $shortest || $shortest == -1) {
Valeu
LikeLike