Top Banner
Сибирский государственный университет телекоммуникаций и информатики КУРСОВОЙ ПРОЕКТ по дисциплине «Структуры и алгоритмы обработки данных» Самойлов Денис Игоревич студент группы ИУ-323 Новосибирск - 2014 Поисковые системы. Инвертированный индекс. Обработка булевых запросов.
16

Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Jul 17, 2015

Download

Software

Denis Samoylov
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Сибирский государственный университет телекоммуникаций и информатики

КУРСОВОЙ ПРОЕКТ по дисциплине

«Структуры и алгоритмы обработки данных»

Самойлов Денис Игоревич

студент группы ИУ-323

Новосибирск - 2014

Поисковые системы. Инвертированный индекс.

Обработка булевых запросов.

Page 2: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Информационный поиск

Информационный поиск (Information Retrieval) – это процесс поиска в большой коллекции некоторого неструктурированного материала, удовлетворяющего информационные потребности

Коллекция – группа документов по которым осуществляется поиск

Информационная потребность (information need) – это тема о которой пользователь хочет знать больше

Релевантность (relevant) – документ называется релевантным, если содержит информацию, удовлетворяющую информационную потребность пользователя

Page 3: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Булева модель поиска

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

В рамках этой модели документ рассматривается просто как множество слов (терминов)

Плюсы: o простота, способность работать с большими объемами

информации o высокая скорость выполнения поисковых запросов o точна, документ либо удовлетворяет запросу либо нет

Минусы: o крайняя жесткость (отсутствие морфологического анализа) o отсутствие ранжирования

Page 4: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Практические применения:

Sphinx (англ. SQL Phrase Index) – система полнотекстового поиска

oпо технологии SphinxSE осуществляется поиск на блоге Хабрахабр, проекте Викимапия и др.

mnoGoSearch - является поисковым движком, использующим SQL, и предназначенным для организации поиска на одном или многих веб-серверах

Булева модель поиска

Page 5: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Матрица «термин-документ»

Индексирование (indexing) – составление индекса документа, для избегания последовательного просмотра текста при выполнении каждого запроса

Матрица инцидентности «термин – документ» (term-document incidence matrix) - запись в которой указано, содержит ли данный документ конкретное слово

Элемент матрицы (t, d) равен 1, если документ из столбца d содержит слово из строки t, и 0, если не содержит.

Page 6: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Вид запроса: tree AND near

Информация о наличии слов в соответствующих документах, берется из матрицы

Выполняется поразрядная операция «AND»

10101 AND 10111 = 10101 – соответственно в первом, третьем и пятом документе содержатся оба этих слова

Doc1 Doc2 Doc3 Doc4 Doc5

tree near

1 0 1 0 1

1 0 1 1 1

Цель: найти документы содержащие слова tree и near

AND

Обработка булевых запросов

Page 7: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Инвертированный индекс

В подобных документах может оказаться до 500 000

разных слов

500 000 Х 1М = 2ТБ – слишком много чтобы

поместиться в памяти

В данном случае невозможно создать матрицу

наивным способом. Матрица такого размера

содержит полтриллиона нулей и единиц

Как минимум 99.8% ячеек будут содержать нули

Требуется произвести поиск в 1 миллионе документов, каждый из которых включает в себя по 1000 слов

Page 8: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Формирование инвертированного индекса

Эта идея является основной по отношению к концепции информационного поиска – инвертированному индексу

Для формирования инвертированного индекса необходимо добавить каждый термин в словарь, затем для каждого термина создать список, в котором указать документы, содержащие этот термин

Решение: хранить в памяти только единицы

словарь

Для организации словарей (инвертированного индекса) может использоваться B+ -дерево

Page 9: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Чтобы получить выигрыш в скорости поиска, необходимо построить инвертированный индекс заранее

Этапы индексирования: Собираем документы подлежащие индексации

Размечается текст, превращая каждый документ в список лексем (tokens) Проводится предварительная лингвистическая обработка Создается список нормализованных лексем, представляющих собой

индексируемые термины

Индексируются документы, в которых встречается термин, создавая инвертированный индекс, состоящий из терминов и списков словопозиций

Формирование инвертированного индекса

Page 10: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Обработка булевых запросов Цель: обработать запрос по инвертированному индексу

Вид запроса: tree AND turn

o Ищем термин tree в словаре, находим его список словопозиций

o Ищем термин turn в словаре, находим его список словопозиций

o Находим пересечение этих списков

Операция пересечения (intersection) является наиболее важной. Для того, чтобы быстро найти документы, содержащие оба термина, необходимо обеспечить эффективное пересечение их списков

Page 11: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Алгоритм пересечения списков словопозиций

function Intersect(list1, list2)

while list1 != NULL AND list2 != NULL do

if list1(docID) = list2(docID) then

AddToResult(result, list1(docID))

/* продвигаем оба списка */

list1 = list1 + 1

list2 = list2 + 1

else

/* продвигаем список с меньшим docID */

if list1(docID) < list2(docID) then

list1 = list1 + 1

else

list2 = list2 + 1

return result

end function

Page 12: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Алгоритм пересечения списков словопозиций

Простой и эффективный метод пересечения списков словопозиций с помощью алгоритма слияния

Сохраняем указатели на два списка и проходим по этим спискам одновременно за время, линейно зависящее от количества словопозиций в списках

На каждом этапе мы сравниваем идентификаторы документов, на которые указывают оба указателя. Если они совпадают, то мы помещаем идентификатор документа в список результатов, а затем продвигаем оба указателя вперед

В противном случае мы продвигаем вперед только указатель, соответствующий списку с меньшим идентификатором

сравниваем

Элементы списка – docID, отсортированные по возрастанию

Page 13: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Алгоритм пересечения списков словопозиций

4 < 14 => продвигаем указатель второго списка

14 = 14 => продвигаем оба указателя, добавляем docID в результирующий список

Результат:

18 < 25 => продвигаем указатель второго списка

Результат:

Page 14: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Алгоритм пересечения списков словопозиций

Результат:

Результат:

25 = 25 => продвигаем оба указателя, добавляем docID в результирующий список

38 = 38 => продвигаем оба указателя, добавляем docID в результирующий список

Первый список закончился - это является условием завершения алгоритма

Результат:

Page 15: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Алгоритм пересечения списков словопозиций

Если обработать нужно более чем два термина, то следует выбрать тот, у которого список словопозиций меньше

Если длины списков словопозиций равны х и у, то пересечение осуществляется за O(х + у) операций. С формальной точки зрения, сложность обработки запроса равна Θ(N), где N—количество документов в коллекции

Page 16: Информационный поиск. Инвертированный индекс. Обработка булевых запросов.

Литература

1. Маннинг К., Рагхаван П., Шютце Х. Введение в информационный поиск. – М.: Вильямс, 2011. – 528 с.

2. Кормен Т.Х., Лейзерсон Ч.И., Ривест Р.Л., Штайн К. Алгоритмы: построение и анализ. – 3-е изд. – М.: Вильямс, 2013. – 1328 с.

3. Д. Э. Кнут: Искусство Программирования. Том 3 Сортировка и Поиск . – М.: Вильямс, 2012. – 824с.

4. www.mkurnosov.net/teaching