Различия

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

Ссылка на это сравнение

поисковый-индекс [2012/09/06 20:51]
Spinne [Прямой и инвертированный индекс]
поисковый-индекс [2012/10/11 04:49] (текущий)
Spinne
Строка 16: Строка 16:
  
 Естественно, прежде чем пользоваться этими инструментами, нужно обработать (проиндексировать) всю коллекцию документов. Для этого нужно каждый документ разобрать на слова, попутно подсчитать число вхождений каждого слова, собрать словарь и индексы. Если не подходить к важности слова в тексте так грубо, а подсчитать важность слов в тексте по [[законы-зипфа|законам Зипфа]], то мы получим уже вполне пригодный инструмент [[ранжирование|ранжирования]] найденных текстов. Естественно, прежде чем пользоваться этими инструментами, нужно обработать (проиндексировать) всю коллекцию документов. Для этого нужно каждый документ разобрать на слова, попутно подсчитать число вхождений каждого слова, собрать словарь и индексы. Если не подходить к важности слова в тексте так грубо, а подсчитать важность слов в тексте по [[законы-зипфа|законам Зипфа]], то мы получим уже вполне пригодный инструмент [[ранжирование|ранжирования]] найденных текстов.
 +
 +===== Поиск по индексу =====
 +Из описания индекса сразу понятно, что это идеальный инструмент для поиска по отдельно взятому слову. Задача тривиальная: по идентификатору WordID выбрать из базы все DocId документов, где это слово встречается. Ранжирование тоже не составит труда, если для каждого DocID в базе хранится информация о том, является ли это слово ключевым в тексте, или же оно второстепенное и не имеет прямого отношения к теме. То есть, для каждой связи "WordID -- DocID" должна быть подготовлена информация о релевантности документа этому слову. 
 +
 +==== Поиск словосочетаний ====
 +В случае запроса из двух и более слов задача резко усложняется. Процедура выборки остается достаточно простой, это стандартная задача в теории баз данных: выбрать документы, в которые входят все слова запроса. Но с ранжированием полученного списка нас ждут трудности. В этом случае нужно учитывать релевантность документа уже не каждому из слов, а именно данному сочетанию слов, иначе ранжирование во многих случаях будет неудачным. Для выяснения релевантности сочетанию слов как минимум нужно учесть, как распределены эти слова в тексте:
 +  - подряд,
 +  - не подряд, но в одном пассаже,
 +  - в смежных пассажах,
 +  - встречаются в разных частях текста.
 +Это самый грубый способ определения релевантности. В первом случае релевантность документа наибольшая, во втором более слабая, в третьем --- уже сомнительная, в четвертом --- минимальная. Для более точной оценки в первых двух вариантах нужно учитывать, соответствует ли запросу порядок следования слов, во втором и третьем варианте учесть расстояние между словами (сколько посторонних слов "вклинилось").
 +
 +==== Учет морфологии ====
 +Для обеспечения полноты поиска требуется учесть формы слов запроса --- следовательно, в индексе нужно приводить слова к исходной форме (например, для существительных --- единственное число, именительный падеж) и связывать со всеми возможными словоформами. В то же время для поиска по точным вхождениям нужна возможность поиска каждой словоформы. Это усложняет структуры данных поисковой системы, приводя к множеству индексов (по понятным причинам тупой стемминг здесь слабо помогает).
поисковый-индекс.txt · создано: 2010/08/02 21:25 — Zanuda · Последние изменения: 2012/10/11 04:49 — Spinne
Наверх
Driven by DokuWiki