Нашел на просторах интернета некие куски алгоритма, которые работают в поисковых системах.
Попробуем частично создать пару функций и поэкспериментируем в бою.
| Название фактора | Краткое описание | Пример кода |
| TR | Текстовая релевантность (maxfreq – частота самого частого слова, которая имеет смысл длины документа). | |
| PrBonus | Priority bonus, приоритет 7 – текстовый приоритет. Фактор бинарный, имеет значение 0 для всех однословных запросов, и значение 1 практически для всех двух и более словных, кроме очень маленького количества ответов, для которых нет ни одной ссылки, прошедшей кворум, и текст тоже не прошел кворум. | |
| TRp1 | Приоритет strict для TR – текстовый приоритет – есть все слова запроса где-то в документе (при этом они проходят контекстные ограничения запроса, например, оба слова д.б. в одном предложении). | |
| TRp2 | Приоритет phrase для TR – текстовый приоритет – есть все слова запроса подряд в документе. | |
| TRtitle | Наличие точной фразы (текста запроса) в заголовке (если точнее, в первом предложении документа). Контекстные ограничения и стоп слова учитываются в точности как в TRp2, т.е. factor[8] minors factor[5] | |
| TRhr | Встретился участок, прошедший кворум, в котором все словопозиции обозначены как имеющие релевантность BEST_RELEV (заголовок или meta keywords). | |
| TRhitw | Hitweigt – вариант текстовой релевантности, в которой веса всех хитов считаются равными (т.е. не учитывают надбавки за title и за близость слов). При этом соответствующие хиты должны пройти ограничения синтаксического колдунщика, т.е. можно считать, что фактор TRhitw равен 0 тогда и только тогда, когда SoftAndOk равен 0 | |
| TRref | Фактор про число refines. В языке запросов есть фича user refines («слово, перед которым стоит знак процентика»). | |
| TRboost | Число, на которое умножаются некоторые линковые факторы (именно, факторы номер 6, 7, 47, 66), если текстовая релевантность 0, и ссылок мало | |
| TRLRlemma | В текстовой релевантности произошло совпадение леммы. | |
| TRUnmapped | TR деленный на куб количества слов в запросе и преобразованный стандартным remapTR. | |
| TextBM25 | Простой BM25 по тексту. | |
| TxtBm25Ex | Простой BM25 по точной форме. | |
| TxtBm25Sy | Простой BM25 c учетом синонимов. | |
| TxtPair | Простой BM25 по парам слов – берем все пары слов запроса и считаем число их вхождений в текст документа. В качества веса пары используем сумму весов слов. Комм Не работает, если в запросе есть стоп-слово | |
| TxtPair_W1 | Простой BM25 по парам слов – берем все пары слов запроса и считаем число их вхождений в текст документа. Вес =1. Комм Не работает, если в запросе есть стоп-слово | |
| TxtPairEx | наличие пар слов по точной форме | |
| TxtPairSy | наличие пар слов c учетом синонимов (>=TxtPair) | |
| TxtBreak | BM25 от количества предложений в документе, в которых встречается. | |
| TxtHead | BM25 по словам только в заголовке. | |
| TxtHeadEx | наличие слов в заголовке по точной форме | |
| TxtHeadSy | наличие слов в заголовке c учетом синонимов | |
| TxtHiRel | BM25 по словам только с high rel-битиками («значимым», с выделением (<b> итп)). | |
| TxtHiRelEx | BM25 по точной форме | |
| TxtHiRelSy | BM25 c учетом синонимов | |
| HasNoTR | У документа нет TR. | |
| TxtBreakEx | количество предложений, в которых встречается много слов по точной форме | |
| TxtBreakSy | количество предложений, в которых встречается много слов c учетом синонимов | |
| TextFeatures | Качество текста. Считается по довольно сложной формуле | |
| HasNoAllWordsTRSy | в документе нет всех слов запроса (с точностью до синонима) | |
| NumWordsTRSy | процент слов запроса в документе (с точностью до синонима) | |
| HasAllWordsTRSy | в документе есть все слова запроса (с точностью до синонима) | |
| Has2ExactQueryParts | Запрос полностью покрывается двумя точными группами, состоящими из exact match слов запроса подряд | |
| HasLevensht1QueryFragment | Cуществует группа, состоящая из exact match слов запроса, покрывающая запрос (возможно, с пропуском, добавлением или заменой слова) | |
| LargestSyInexactGroup | Доля запроса, покрываемая самой длинной группой, состоящей из любых хитов (в т.ч. словоформ и синонимов). Возможно, с пропуском, добавлением или заменой слова | |
| NumLatinLetters | число латинских букв в тексте (не считая разметки), загнанное в [0,1] формулой n/(n+100) | |
| QSegmentsBreaks | Сегменты запроса – это части запроса, которые сами по себе являются частотными запросами. Фактор показывает, насколько сегменты бьются в тексте. значение 0 – все слова встречаются только в рамках обозначенных сегментов, 1 — все вхождения разбивают сегменты | |
| QSegmentsBM25 | BM25, где в качестве «слов» выступают выделенные сегменты запроса | |
| QSegmentsWeight | «Вес» сегментов запроса в тексте | |
| TextMaxForms | Максимальное число форм по всем словам запроса – max по всем словам запроса числа_форм_для_слова/64 | |
| TextWeightedForms | Взвешенная по весам слов сумма числа форм – сумма по всем словам запроса числа_форм_для_слова/64*вес_слова; remap вида x/(1 + x). | |
| TextForms | Невзвешенная сумма числа форм – сумма по всем словам запроса числа_форм_для_слова/64/число_слов_запроса | |
| HasTextPos | У документа есть текстовая релевантность | |
| SWBM25 | Хитрый BM25 в скользящем окне. Размер окна задается в предложениях. Используются «джокеры» для заголовков и начала документа. Учитывается морфологическая близость и структура текста. Вес окна затухает с удалением от начала документа. | |
| FieldLM | Униграммная языковая модель. Моделируется языковая по документу, сглаживается общеязыковой моделью. При построении модели по документу используется информацию о том, в каком поле документа встретилось слово запроса (Title, head или plain text) | |
| YmwFull | Размер минимального куска текста, включающего все встречающиеся в документе слова запроса. Сейчас не используется. | |
| YmwFull2 | Исправленный YmwFull. Отличается от предыдущей версии только поведением на 2хсловных запросах. | |
| Bclm | Фактор имени Buettcher, Clarke и Lushman (модифицированный) | |
| TitleTrigramsQuery | Вычисляет покрытие запроса буквенными триграммами заголовка документа | |
| TitleTrigramsTitle | Вычисляет покрытие заголовка буквенными триграммами заголовка документа | |
| QueryWordSequencesTR | Считает сумму вхождений следующего вида: последовательность слов запроса длиной больше двух, встретившихся в одном предложении; нормировано на длину документа. | |
| MPSA | Оценивает минимальное расстояние между парами слов запроса с учетом удаленности пары от начала документа (Minimal Pair Size with Attenuation). Под парами понимаются все последовательные биграммы слов запроса. Таким образом, количество пар равно количеству слов в запросе, уменьшенному на 1. Соответственно, фактор имеет смысл для запросов, состоящих более чем из одного слова. | |
| BCLm2 | Отличается от BCLm тем, что веса всех слов считаются одинаковыми. | |
| AbsolutePLM | Текстовая релевантность на основе языковой модели, учитывающая абсолютную позицию. Идем по тексту с окошком 20 слов, строим по каждому окошку языковую модель (то есть распределение вероятностей на словах русского языка) и вычисляем вероятность порождения запроса. За удаление от начала документа штрафуем модель. | |
| BCLmLite | Модификация фактора Bclm2, облегченная для использования в фастранке. Основное отличие состоит в том, что в BclmLite не используются абсолютные смещения слов относительно начала документа. Вместо этого фактор работает с обычными позициями вида <Номер_предложения, Позиция_в_предложении>. При этом близость между словами учитывается только внутри предложения. | |
| DBM25 | BM25, в котором вес слова машинноподобран | |
| FiltrationSegments | Доля сегментов запроса, присутствующая в тексте | |
| QueryWordCohesionTR | Фактор оценивает как слова запроса группируются друг с другом в тексте документа без учета их порядка. | |
| DBM25_2 | Вариация на тему DBM25 | |
| Tocm | Фактор оценивает отличия позиций слов в заголовке от позий слов в запросе | |
| DBM30Smerch | Вариация на тему DBM25 | |
| OqBm25Str | Bm25 по запросному индексу для владельцев | |
| OqBm25Lem | Bm25 по запросному индексу для владельцев | |
| OqBm25Syn | Bm25 по запросному индексу для владельцев | |
| OqBclmWeighted | BCLM по запросному индексу для владельцев | |
| OqBclmPlain | BCLM по запросному индексу для владельцев | |
| SmallWindow | Максимальная сумма вес слов запроса в окне в 50 слов | |
| SynSetTitle1 | Триграммный матчинг заголовка страницы с синсетами запроса. | |
| SynSetTitle2 | Триграммный матчинг заголовка страницы с синсетами запроса, другая версия. | |
| BOCM | Оценивает соответствие позиций слов в предложениях документа позициям слов в запросе. | |
| FioMatch | В документе присутствует ФИО из запроса. | |
| BclmMax | Близость слов запроса к самому тяжелому слову. |



