как реализовать поиск, где релевантность будет оцениваться близостью поисковой фразы к началу строки?
, в котором могут содержаться только дополнительные сведения
вот пока такие мысли. будем думать вместе? :)
Greg:
я тоже сейчас озадачен этим вопросом. есть такие мысли: по твоему вопросу
как реализовать поиск, где релевантность будет оцениваться близостью поисковой фразы к началу строки?
1.очевидно, что нужно искать вхождение подстроки в строку (функции зависят от языка). вычислить длину строки и определить относительную величину, которая и покажет, насколько близко искомая строка находится к началу строки, в которой ищем
2. к релевантности нужно наверное еще отнести частоту вхождения слова или фразы в строку, в которой ищем. можно с учетом словоформ, что сложнее организовать
3. в третьих нужно определить насколько важен текст. т.е. если в строке содержаться HTML-теги, то вероятнее всего, что текст в теге, будет важнее, чем в теге
, в котором могут содержаться только дополнительные сведения
вот пока такие мысли. будем думать вместе?
SELECT `produсts`.*, SUM((`products`.`words_in`-`products_words_in`.`rate`)/`products`.`words_in`-1) AS `page_rating`
FROM `products`,`products_words_in`
WHERE `products_words_in`.`product_id`=`products`.`id`
AND `products_words_in`.`word_id` IN (1,2,4,5)
GROUP BY `produсts`.`id
ORDER BY `page_rating` DESC
Greg:
AlieN мне кажется, что тогда нужно искать сначала полное совпадение фразы + позиция в строке, а затем уже слова по отдельности или фраза минус одно слово, минус два слова и т.д. - т.е. сделать переборку
$query = "какая-то фигня";
$text1 = "какая-то фигня очень часто попадается в незначащих темах на этом форуме";
$text2 = "спам - ненужная информация, какая-то фигня, чаще всего в почтовых системах";
function get_relevance($query,$text) {
$tmp = substr($text,0,(strpos($text,$query)+strlen($query)));
if($tmp!==false) {
return similar_text($query,$tmp);
} else {
return 0;
}
}
Text1 - 14
Text2 - 14
Greg:
мне кажется, что тогда нужно искать сначала полное совпадение фразы
$query = "какая-то фигня";
$text1 = "какая-то фигня очень часто попадается в незначащих темах на этом форуме";
$text2 = "спам - ненужная информация, какая-то фигня, чаще всего в почтовых системах";
function get_relevance($query,$text) {
$tmp = substr($text,0,(strpos($text,$query)+strlen($query)));
if($tmp!==false) {
return levenshtein($query,$tmp);
} else {
return 0;
}
}
echo "Text1 - ".get_relevance($query,$text1)."
";
echo "Text2 - ".get_relevance($query,$text2)."
";
?>