2012-05-21 3 views
2

J'utilise l'appel de similar_text() de PHP pour comparer deux chaînes, cependant, je ne reçois pas assez de résultats, par exemple, le meilleur que j'obtiens est 80.95% pour un match que je voudrais voir 100% sur .Comment améliorer la chaîne PHP avec similar_text()?

Quelles autres fonctions puis-je utiliser pour réduire les chaînes au niveau du noyau?

<!-- Overcast, Rain or Showers compared Overcast, Rain or Showers is 80.9523809524 --> 
<!-- Overcast, Risk of Rain or Showers compared Overcast, Rain or Showers is 86.2068965517 --> 
<!-- Overcast, Chance of Rain or Showers compared Overcast, Rain or Showers is 83.3333333333 --> 

Répondre

4

distance de Levenshtein: http://php.net/manual/en/function.levenshtein.php

Il est inverse de similar_text(), donc 0% signifie qu'il n'y a pas de différence.

// <!-- Overcast, Rain or Showers compared Overcast, Rain or Showers is 0 --> 
// <!-- Overcast, Risk of Rain or Showers compared Overcast, Rain or Showers is 11 --> 
// <!-- Overcast, Chance of Rain or Showers compared Overcast, Rain or Showers is 13 --> 
+0

Merci. Cela fonctionne beaucoup mieux et offre même le '0' quand ils correspondent parfaitement. – sandraqu

3

Le Levenshtein distance est une bonne façon de comparer les chaînes. Il est plus rapide que similar_text(), et il vous permet de contrôler sa sortie en pondérant les différentes parties de l'algorithme.

Pour activer la distance Levenshtein en pourcentage « match » utilisable, vous pouvez l'exprimer comme une fraction de la longueur moyenne des chaînes de source:

// Assume $src1 and $src2 are your source strings and at least one is non-empty 

$avgLength = (strlen($src1) + strlen($src2))/2; 
$matchFraction = 1 - (levenshtein($src1, $src2)/$avgLength); 

//$matchFraction is now between 0 and 1, with 1 being equal strings and 0 being totally different 
Questions connexes