Форум → Программирование → PHP для идиотов → Поиск с учетом расстояния между словами запроса
Поиск с учетом расстояния между словами запроса
-
Есть индекс - слова и их частоты в документах. Чем выше частоты слов запроса, тем релевантнее найденный документ. Задача - при расчете релевантности учитывать то, как далеко друг от друга эти слова в тексте.
Пример.
Есть запрос из двух слов:
"a b"
Пусть найдены два совпадения:
1) "…a x y z b x y z a…" (3 совпадения)
2) "…x y z a b x y z…" (2 совпадения)
(x y z - некоторые другие слова)
Очевидно 2-ой результат больше подходит заданному запросу (хотя совпадений меньше, но зато искомые слова рядом).
Собственно вопрос - как это реализовать?
Есть идея - записывать в тот же индекс пары слов, как они идут в исходных текстах документов и назначать им больший "вес". Но это какой-то топорный и не расширяемый вариант (запрос же может быть длиннее двух слов).
Хранить позиции каждого слова? Накладно, да и запросы, наверное, получатся тяжелыми.
В общем поделитесь идеями. Ссылки на литературу приветствуются. -
Окт. 11, 2011, 4:20 д.п., спустя 152 дня 1 час 34 минуты
у меня в подписи почитай там строковые функции пхп ;) -
Окт. 11, 2011, 6:11 д.п., спустя 1 час 50 минут 48 секунд
Это называется релевантностьСпустя 90 сек.Ой, начал читать с конца)
Лучше не мучайся - все уже давно за тебя написано, используй готовые решения -
Окт. 31, 2011, 9:05 д.п., спустя 20 дней 2 часа 53 минуты
Если просто слова - это одно, можно регэкспами все сделать, со словоформами сложнее, учитывая морфологию русского языка -
Окт. 31, 2011, 9:40 д.п., спустя 34 минуты 50 секунд
в mysql есть fulltext search
а вообще sphinx вродене всё полезно, что в swap полезло -
Окт. 31, 2011, 9:51 д.п., спустя 11 минут 38 секунд
sphinx однозначно, иначе начнешь думать о смазке, как один велосипедист из соседней темы) -
Окт. 31, 2011, 9:18 п.п., спустя 11 часов 27 минут 14 секунд
юзай SphinxQLhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
Ноя. 1, 2011, 12:46 д.п., спустя 3 часа 27 минут 14 секунд
я думаю Timur за полгода определился уже )You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!