Re: Re: PLS Advise, Highlighted Text from a Query
| From: | Mikon Dosogne | Date: | Thu, 19 Jun 2003 05:38:54 +0000 |
| Subject: | Re: Re: PLS Advise, Highlighted Text from a Query | ||
| Groups: | php.db | ||
| Request: | Send a blank email to php-db+get-28725@lists.php.net to get a copy of this message | ||
[...]
what about the percentage how much accurate the result returned??I'm not sure what kind of keywords or text you're searching, but here's the algorithm i used a while back, for plain-text search: given: $query $text /* curve() maps values between 0 and 1 to.. a curve: 0% -> 0% 25% -> 43% 50% -> 75% 75% -> 93% 100% -> 100% */ function curve($x){ $x = 1 - $x; $x = $x * $x; return 1 - $x; } /* given a number between 0 and +INFINITY, strength returns a value between 0 and 1 (0% and 100%) the higher $n is, the closer to 1 the result.
0 -> 0% 6 -> 85.7% 1 -> 50% 7 -> 87.5% 2 -> 66.6% 8 -> 88.8% 3 -> 75% 9 -> 90% 4 -> 80% 19 -> 95%5 -> 83.3% 100 -> 99% */ function strength($x){ return ($x / ($x + 1)) } $count = 0 $keywords = (split $query into array of whole words) for (each word in $query) { $n = (number of times $word found in $text); // add the size of $word to $count, or more depending on $n $count += (length of $word) * (1 + strength($n)); } $score = ($count + $count) / (length of $query + length of $text ); $score = curve($score); // repeat a few times if needed, to get decent scores and there you have it. ------------------------------------- mikon