thanks so much for your help ,
but would help me more to implement the example :
$query = "open source world, open mind for all";
$text = "open";
.
.
$count = 0;
$keywords = (split $query into array of whole words);
for (each word in $query) {
$n = (number of times $word found in $text);
$count += (length of $word) * (1 + strength($n));
}
$score = ($count + $count) / (length of $query + length of $text );
$score = curve($score);
Nabil
"Mikon Dosogne" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> [...]
> > 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
>
--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php