Нашел на просторах интернета некие куски алгоритма, которые работают в поисковых системах.
Попробуем частично создать пару функций и поэкспериментируем в бою.
Название фактора | Краткое описание | Пример кода |
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 | Близость слов запроса к самому тяжелому слову. |