Расчет веса используя координатный индекс

12
D
На сайте с 20.10.2003
Offline
9
2540

Цель данного расчета понятна - чем ближе слова из запроса пользователя тем выше вес страницы..

Вопрос как это лучше реализовать?

Сейчас есть что-то подобное:

1) берем минимальную координату из списка слов

2) устанавливаем ее в следующую

3) считаем вес данного сочетания координат слов

4) Если вес пороговый - выход (все слова идут один за другим как в запросе пользователя)

5) Если вес больше текущего меняем текущий и на пункт 1

Григорий Селезнев
На сайте с 25.09.2001
Offline
298
#1

привел бы ты лучше пример расчета ... для конкретных тегов указал примерый "вес" ... а так же ввел бы зависимость веса от расстояния от "начала" (правда можно считать что начал может быть несколько) ...

D
На сайте с 20.10.2003
Offline
9
#2

Привожу пример как работает сейчас:

Например запрос 3 слова:

Для всех страниц, где встречаются 3 слова:

1) формируем начальный массив (из координатного индекса каждого слова)

первое слово - координата 1

второе слово - координата 4

третье слово - координата 5

Считаем вес...

2) Первое слово минимум

смотрим следующую координату например 2 (ну в индексе +1)

первое слово - координата 2

второе слово - координата 4

третье слово - координата 5

Считаем вес

И т.д.

PS: Перефразирую вопрос: Как найти наиболее близко лежащие слова используя координатный индекс?

VT
На сайте с 27.01.2001
Offline
130
#3
Перефразирую вопрос: Как найти наиболее близко лежащие слова используя координатный индекс?

Читать форум. Этот вопрос уже

обсуждался и не раз.

D
На сайте с 20.10.2003
Offline
9
#4
Как писал Vyacheslav Tikhonov

Читать форум. Этот вопрос уже
обсуждался и не раз.

Указанные вами ссылки я читал и до того... но вопрос в другом (не в том как выбрать пересечение 2 ссылка, и не в том как подсветить слова с учетом словоформы)

а как найти оптимально слова находящиеся рядом анализируя только координатный индекс:

например слова из запроса "работа в киеве"

работа на странице встречается на 2 5 10 11 22 33 позиции

а киеве на 3 12 ....

и нужно как можно более оптимально найти место работа 11 - киев 12 - что указывает на то что в документе слова рядом..

AA
На сайте с 16.04.2001
Offline
70
#5
Как писал draal
как найти оптимально слова находящиеся рядом анализируя только координатный индекс: например слова из запроса "работа в киеве"
работа на странице встречается на 2 5 10 11 22 33 позиции
а киеве на 3 12 ....

Если я правильно понял вопрос (поиска близких позиций n объектов), то есть простое решение методом последовательного спуска.

Заводится массив из n первых позиций всех объектов. Находим объект с минимальной позицией, переводим его к следующей позиции. Снова находим минимум. Повторяем. Все.

Таким образом можно решить все задачи со взаимным положением внутри какого-то интервала.

С уважением, Антонов Александр.
D
На сайте с 20.10.2003
Offline
9
#6

Именно так я эту проблему и решил (это описано в начале топика - наверно не совсем понятно :D )

А может есть какие-то специализированные алгоритмы для решения данной задачи?

AA
На сайте с 16.04.2001
Offline
70
#7

Увы, не вижу, как можно улучшить этот алгоритм принципиально, т.е. сделать лучше, чем O(суммы позиций). Мелкие улучшизмы, конечно, возможны: оптимизировать работу с редкими позициями, например.

I
На сайте с 15.12.2000
Offline
80
#8
Как писал AlexA
Увы, не вижу, как можно улучшить этот алгоритм принципиально, т.е. сделать лучше, чем O(суммы позиций).

Точнее O(число_позиций)*log(число_слов), если выбирать очередную минимальную позицию не полным перебором по всем словам, а при помощи пирамиды (pop_heap/push_heap или priority_queue в STL).

Когда слов больше 3-4, это актуально.

AA
На сайте с 16.04.2001
Offline
70
#9
Как писал iseg
если выбирать очередную минимальную позицию не полным перебором по всем словам

Согласен, на эти грабли тоже можно наступить. Вопрос к Илье: можешь ли сообщить свою статистику по одно-, двух-, трех- и т.д.-словным запросам?

MG
На сайте с 18.10.2002
Offline
27
#10

На самом деле у вас все немного в кучу. Ваш алгоритм - так называемое "скользящее окно", дает достаточно неплохие результаты и широко применяется. Не вижу только ни в вашей формуле, ни в формуле Ильи нормализации по длине документа. Если подходить к этому вопросу несколько шире, то возможны две ситуации:

1. Взаимное положение используется для учета словосочетаний. Т.е. пользователь задал одно или несколько словочетаний ("цифровая камера", "еврейские анекдоты" и т.п.). Описанный алгоритм хорошо для этого подходит (это частный случай выделения словосочетаний путем учета расстояний), но можно использовать любой статистический/синтаксический алгоритм выделения словосочетаний и взвешивать их как слова (любой известный алгоритм). Литературы по этому поводу - море... Т.к. большинство запросов в и-нете это просто одно словосочетание, то результат неплохой. Если в запросе словосочетаний несколько, то возможны разные эффекты, в т.ч. и не очень приятные.

2. Пользователь ищет по цитате, т.е. берет фразу из документа, возможно с искажениями. Ситуация достаточно редкая для и-нета, но очень вероятная для библиотечных, патентных, правовых баз и т.д. В этом случае описанный подход обычно выкидывает наверх совсем не то, что ожидает пользователь. В этом случае нужно считать что-нибудь типа метрики Левинштейна между запросом и скользящим окном, где под символами рассматривать слова.

В реальной системе, которая должна поддерживать обе ситуации, ищется и так и так, а потом пользователю выдается "комбинированный" результат, где на основании некоторой эвристики решается что все-таки хотел пользователь.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий