Глава 1. Обзор литературы План главы 1. Актуальность проблемы поиска и сбора информации в Интернет Интернет – популярный источник информации 1.1. 1.1.1. Определения Интернета и Web 1.1.2. Доступность 1.1.3. Динамичность развития и обновления 1.1.4. Качество содержимого варьируется в широких пределах Информационная потребность (ИП) 1.2. Сложность формализации ИП 1.2.1. 1.2.1.1. На естественном языке 1.2.1.2. В терминах ИПС 1.2.1.3. Понятие пертинентности Критерии для построения оценки удовлетворения информационной 1.2.2. потребности 1.2.2.1. Точность 1.2.2.2. Полнота 1.2.2.3. Релевантность 2. Задачи, схема работы ИПС Основные виды ИПС для Интернета 2.1. 2.1.1. Классификационные 2.1.2. WebRing 2.1.3. Словарные 2.1.4. Метапоисковые Сбор и мониторинг информации, индексирование 2.2. Кратко; детальное описание в п.3 2.2.1. Обработка поисковых запросов 2.3. Способы выражения ИП на ИПЯ 2.3.1. 2.3.1.1. Язык запросов к ИПС 2.3.1.2. Поиск документов, похожих на данный 2.3.1.3. Поиск по тематике 2.3.2. Интерпретация запроса системой 2.3.3. Вывод результатов 1 Список функций абстрактной ИПС 2.4. 3. Сбор информации - задача робота ИПС Методы получения адреса (URL) ресурса 3.1. 3.1.1. Выделение URL из имеющихся локальных копий ресурсов 3.1.2. Список URL веб-серверов из БД NIC 3.1.3. Обработка файлов Robots.txt на посещаемых роботом сайтах 3.1.4. Sitemaps Получение страницы по протоколу HTTP 3.2. 3.2.1. Forms 3.2.2. Flash и прочее содержимое, малопригодное для анализа Предварительная обработка страниц 3.3. 3.3.1. Приведение текста страниц к стандартной кодировке 3.3.2. Отделение текста от разметки Обработка содержимого страниц 3.4. Стратегии обхода и оценки ссылок на очередной странице (Google 3.4.1. PageRank как канонический пример) Анализ содержимого страницы и включение его в индекс 3.4.2. 3.4.2.1. Векторная модель документа 3.4.2.2. Учет грамматики и семантики содержимого 4. Методы решения задачи лексического анализа Основные понятия 4.1. 4.1.1. Словарь 4.1.2. Ключ Сравнение лексем 4.2. 4.2.1. Редактирующее расстояние Поиск по точному ключу 4.3. 4.3.1. Последовательный поиск 4.3.2. Бинарный поиск 4.3.3. AVL-дерево 4.3.4. Красно-черные деревья 4.3.5. Skip-list 4.3.6. B-деревья 4.3.7. Цифровой поиск 4.3.8. Строковое B-дерево 4.3.9. Направленный ациклический граф слов 2 4.3.10. Хеширование Поиск по приближенному ключу 4.4. 4.4.1. Анти-полюсное дерево 4.4.2. B-дерево 1. Актуальность проблемы поиска и сбора информации в Интернет В 1995 году Федеральный Совет по Сетям США (Federal Networking Council, FNC) в сотрудничестве с компьютерным сообществом принял резолюцию, определяющую термин «Интернет» (Internet, Interconnected Networks). Это глобальная информационная система, которая: логически связана с помощью единого адресного пространства на базе IP (Internet Protocol) или его расширенными/последующими версиями поддерживает передачу данных с помощью семейства протоколов TCP/IP (Transmission Control Protocol/Internet Protocol) или его расширенными/последующими версиями и/или другими IP-совместимыми протоколами предоставляет, использует, делает доступными, публично или персонально, информационные услуги высокого уровня, базирующиеся на описанной выше инфраструктуре [15] Интернет объединяет компьютерные сети, расположенные по всему миру. На его базе действует множество информационных услуг, таких как электронная почта, передача файлов, и, в том числе, WWW (World Wide Web, или просто Web) – система гипертекстовых документов и других информационных ресурсов. Гипертекстовые документы характеризуются наличием ссылок друг на друга. Помимо этого, они могут содержать ссылки на документы в других форматах, отличных от гипертекста, и на другие данные. Сервер, предоставляющий информационные ресурсы WWW, называется вебсервером. С 1989 года, когда были опубликованы первые предложения по внедрению гипертекстовой технологии в существующую на тот момент глобальную сеть [8], количество веб-серверов растет экспоненциально (Рисунок 1, [16]). 3 Рисунок 1 По мере распространения поставщиков услуг доступа в Интернет и снижения цен на такие услуги, всё больше людей получали возможность не только использовать информацию из Сети, но и добавлять её, и, довольно часто, бессистемно. В наши дни, благодаря своей доступности WWW становится одним из популярнейших источников информации. Наряду с появлением в WWW новой информации, имеет место изменение содержания существующих информационных ресурсов. Страницы, посвященные новостям и другой быстро устаревающей информации, обновляются регулярно. Ввиду децентрализованной структуры WWW, ее архитектура и принципы построения не предполагали какой-либо контроль и упорядочение содержимого. Полезность информации варьируется в весьма широких пределах, так как каждый пользователь имеет возможность размещать любые данные, будь то авторская научная статья или личная информация сомнительного содержания. Если человек хочет получить какую-либо информацию, говорят, что у него возникла информационная потребность. Для её выражения он излагает неформальное описание требуемой информации, например, в виде вопроса на естественном языке. Уже на этом этапе проблематично обеспечить полноту такого описания: в каком контексте интерпретировать фразу, насколько подробный требуется ответ. Предположим теперь, что пользователь имеет некоторую информационную потребность и ему доступно электронное хранилище информации. Хранилище может быть снабжено информационно-поисковой системой (ИПС), реализующей некоторое множество операций над множеством хранимых данных. Средством выполнения операций может служить форма поиска, принимающая запросы на языке информационнопоисковой системы (ИПЯ). Пользователю необходимо формализовать информационную 4 потребность в терминах ИПЯ, то есть отказаться от формулировки на естественном языке (ЕЯ) и ограничиться несколькими словами запроса на ИПЯ. Полнота такой постановки вопроса практически исключается. Следовательно, становится невозможным и точный на него ответ. Степень соответствия документа информационной потребности, называют его пертинентностью, или когнитивной релевантностью [9]. Это субъективная оценка. Для пользователя ИПС решающее значение имеет пертинентность информации, выдаваемой системой на его запросы. Степень соответствия документа запросу, то есть формализованной информационной потребности, называют системной (алгоритмической) релевантностью. Это объективная оценка. Вычислить её, в отличие от пертинентности, возможно и без помощи пользователя. Поэтому она часто используется ИПС для выделения подмножества документов, соответствующих поисковому запросу. Такие документы называются релевантными данному запросу. Алгоритмически релевантный запросу документ может не быть пертинентным информационной потребности пользователя. Это определяется тем, какие алгоритмы оценивания реализованы на стороне ИПС, насколько хорошо ИПС «понимает» запрос на ИПЯ, и характеризует полезность ИПС для пользователя в целом. Результатом поиска обычно является список документов, являющихся релевантными запросу в соответствии с оценкой ИПС. Количественными критериями эффективности поиска обычно принимают две величины: точность и полноту результата, выданного ИПС на поисковый запрос. Точность результата – это доля пертинентных (объективно релевантных) документов в результате поиска. Полнота – это доля найденных пертинентных в общем числе пертинентных документов [14]. Нерелевантные документы иногда называют шумом по отношению к релевантным, которые в этом случае называют сигналом [9]. 2. Задачи, схема работы ИПС Существующие ИПС могут решать такие задачи, как: Поиск документов определенной тематики Классификация документов по тематикам (построение каталога) Поиск документов по ключевым словам Поиск документов, «похожих» на заданный образец Рассмотрим основные виды ИПС для WWW. Идея библиотечных систематических каталогов применительно к Интернет привела к появлению классификационных ИПС. Они представляют собой систематизированные по тематике каталоги ссылок на ресурсы WWW. Составитель самостоятельно оценивает 5 релевантность информационного ресурса определенной тематике и добавляет ссылку на нее в каталог. Достоинством такого подхода является соответствие содержания информационного ресурса тематике раздела каталога, содержащего ссылку на этот ресурс. Однако для создания и поддержания такой ИПС требуются экспертные знания в покрываемых ИПС предметных областях, большой объем ручного труда на пополнение каталога, обновление или удаление утративших актуальность ссылок. С точки зрения пользователя, может оказаться недостаточно детальным или неудобным упорядочение на уровне тематик. Примером каталога ссылок может служить сайт www.dmoz.org, поддерживаемый большим сообществом добровольцев. Сходный подход используется при организации так называемых колец ссылок (WebRing). Сайты, посвященные одной тематике, содержат ссылки друг на друга, образуя «кольцо», по которому пользователь может перемещаться от сайта к сайту в поиске необходимой ему информации. Зачастую в кольце присутствует сайт-координатор, хранящий список сайтов-участников кольца. В этом случае они также хранят ссылку на координатор. Существуют каталоги колец ссылок, как, например, http://dir.webring.com/rw, содержащий информацию о более чем 40000 сообществ. Как и в случае классификационных ИПС, данная схема подразумевает формирование с участием коллектива людей – администраторов информационных ресурсов. Соответствие тематике и полнота таких ресурсов в значительной степени субъективна. С точки зрения пользователя удобство работы с кольцами ссылок оценивается неоднозначно: можно как найти кольцо по нужной тематике, так и потратить время на просмотр «мусора». Словарные поисковые системы лишены указанных недостатков. Множество информационных ресурсов (документов), на которых планируется выполнять поиск, предварительно обрабатывается для составления инвертированного индекса. Он представляет собой отображение из множества слов словаря – отсюда название ИПС – на множество документов. Поисковые запросы принимаются на определенном ИПЯ. Инвертированный индекс позволяет при обработке запроса без больших вычислительных затрат получить список релевантных, по критериям данной ИПС, документов, и выдать его пользователю. Примерами словарных ИПС могут послужить Яндекс, Google. На ранних этапах развития словарных ИПС для WWW качество результатов поиска было сравнительно низким, а количество ИПС данного типа, напротив, значительно. Это способствовало возникновению метапоисковых ИПС. Такие принимают пользовательские запросы на некотором ИПЯ и перенаправляют их сразу на несколько словарных ИПС словарного типа, переводя запрос на их собственные ИПЯ. Результаты поиска каждой из них объединяются, причем метапоисковая система может упорядочить ссылки на 6 документы в соответствии с собственными критериями оценки релевантности. Таким образом, пользователь освобождается от необходимости выполнять рутинную работу по отправке запросов, выражающих одну информационную потребность, на несколько словарных ИПС. Ввиду постоянного добавления и изменения информации в WWW, индексы словарных ИПС быстро устаревают. Поэтому возникает необходимость обновлять индекс как можно чаще. Эту работу выполняет модуль ИПС, называемый поисковым роботом, краулером (crawler), информационным агентом [14]. Начиная с некоторого исходного набора ссылок, он посещает информационные ресурсы, предназначенные для индексирования. Происходит обновление устаревшей, мониторинг изменяющейся и добавление новой информации в индекс. Подробно этап индексирования в словарных ИПС будет рассмотрен далее. При работе с ИПС от пользователя требуется некоторая формализация информационной потребности. В этом смысле словарные ИПС являются более гибкими, чем остальные рассмотренные типы. Они принимают запросы на ИПЯ, который может обеспечивать широкие возможности задания операций для выражения информационной потребности. В их число входят: Булевы операторы. Например: запрос «теория AND алгоритм» дает ИПС команду построить пересечение множеств документов, содержащих первое либо второе слово. Учёт морфологии языка. Это может быть способность ИПС «понимать» разные формы одного и того же слова, например по запросу «печь» будет проведен и поиск документов со словом «печка». Еще один способ выражения информационной потребности состоит в постановке перед ИПС задачи поиска документа, похожего, в каком-то определенном смысле, на указанный пользователем. Нечто среднее между поиском по запросу на ИПЯ и использованием каталога ссылок представляет собой поиск с помощью словарной ИПС документов заданной тематики. От ИПС в этом случае требуется на этапе индексирования выделять множество тематик и сортировать по ним документы. После того, как пользователь составил свой запрос, происходит его интерпретация поисковой системой. В этот этап входят лексический, синтаксический разбор выражениязапроса, работа с индексом. Для обеспечения быстродействия поискового интерфейса пользователя ИПС, важно, чтобы вся эта работа не потребовала больших вычислительных затрат. 7 Учитывая неизбежность огрубления описания информационной потребности на этапе формализации, велика вероятность ошибочной оценки непертинентных документов как релевантных. Вывод результа поиска должен обеспечивать пользователю минимум усилий по отсеву непертинентных документов. Для этого список результатов упорядочивают в порядке убывания релевантности, включают в него фрагменты текста документов. Обобщив вышесказанное, перечень задач, решаемых модулями абстрактной ИПС, выглядит приблизительно так: загрузка с WWW-сервера информационного ресурса, адрес которого предварительно получен каким-либо способом структурный анализ документа (например, распознавание в документе форматирования: заголовков и других способов выделения фрагментов текста) лексический анализ документа (например, идентификация слов текста в словаре ИПС, фильтрация несущественных лексем) грамматический анализ документа (имеется в виду грамматика ЕЯ. Т.е. нужно определить часть речи и грамматическую форму лексемы (если сущ., то ед или множественное число, если глагол, то это, например причастие I или II, или, более сложный вариант, отглагольное существительное, и т.п.)) синтаксический анализ документа (каким членом предложения является слово, лексема-существительное например). См. А.А.: «Важность синтаксического анализа для получения оценки релевантности ресурса можно пояснить на следующем примере. Если в обрабатываемом документе разрешить референции дополнений, указанных местоимениями, на существительные преценденты, т.е. упоминавшиеся в этом документе ранее, то индексы для ключевых слов, совпадающих с этими существительными изменятся.» семантический анализ документа (например, построение векторной модели документа для последующей оценки его релевантности запросам) индексирование информации, хранимой на стороне ИПС систематизация накопленной информации предоставление пользователям интерфейса для создания и выполнения поисковых запросов предоставление пользователям услуг в форме списков адресов ресурсов, релевантных формализованному запросу на информацию 8 3. Сбор информации - задача робота ИПС Рассмотрим работу системы сбора информации ИПС на примере прототипа Google. Для работы с объемами информации, исчисляемыми миллиардами веб-страниц, Google использует распределённую систему сбора информации. Модуль URL-провайдера поставляет ссылки нескольким роботам, работающим распределенно. Каждый робот поддерживает порядка сотни соединений одновременно, использует собственный DNSкэш. Полученные роботами веб-страницы помещаются в хранилище для последующего анализа и индексирования [10]. Список ссылок, которые должен обработать робот, формируются путем анализа ранее полученных локальных копий документов. Адаптивный подход предполагает расстановку приоритетов в загрузке ресурсов по некоторому критерию. Больший приоритет отдается часто обновляемым информационным ресурсам. В некоторых случаях посещение роботом информационных ресурсов может быть нежелательным. Например, при выполнении роботами запросов к веб-серверу возникает нежелательная нагрузка на него. На страницах сайта может быть опубликована информация для личного пользования, появление которой в результате поиска нежелательно для автора. В 1994 году было принято соглашение о способе ограничения посещения веб-серверов роботами. Было предложено использовать файл с именем robots.txt, размещенный в корневом каталоге веб-сервера и имеющий особый формат. Он позволяет администратору сервера рекомендовать роботам (всем или некоторому их подмножеству, определяемому именами роботов) подмножество ресурсов сервера, которые нужно анализировать, а также периодичность таких проверок [11]. Дополнением применению файлов robots.txt является использование карты сайта (sitemap). Она представляет собой XML-файл стандартизованной схемы, содержащий список URL сайта с метаданными, такими как дата и время обновления, частота обновления, важность по сравнению с остальными ресурсами данного сайта. URL карты сайта указывается в файле robots.txt [13]. Для взаимодействия с веб-серверами предназначен протокол Hyper Text Transfer Protocol (HTTP). В число его основных возможностей входят получение содержимого информационного ресурса с веб-сервера, отправка пользовательских данных на вебсервер. Помимо содержимого, в тексте ответа веб-сервера на НТТР-запрос обычно присутствуют такие метаданные, как дата и время последнего обновления содержимого, его формат, размер и другая дополнительная информация [13]. Язык гипертекстовой разметки (Hyper Text Markup Language) допускает наличие на некоторых веб-страницах форм. Результатом заполнения формы служит URL, 9 содержащий текст полей. Заполненная форма может открывать доступ к содержимому веб-сервера, на которое отсутствуют прямые ссылки из других документов или карты сайта. Это явление получило название «Глубокая Паутина» (Deep Web). Считается, что она может содержать не меньше информации, чем доступная по обычным ссылкам часть WWW. Для получения содержимого «Глубокой Паутины» в Google разработан полностью автоматизированный подход, называемый (surfacing approach). Из обработки исключаются формы, содержащие такие поля, как «Имя пользователя», «Пароль». Большинство форм содержит несколько полей, и перечисление всевозможных элементов декартова произведения множеств содержимого каждого поля неэффективно. Google на основе анализа уже полученных страниц генерирует несколько сотен вариантов заполнения формы. Результирующие URL могут быть проиндексированы подобно любым другим вебстраницам. Это позволяет использовать существующую инфраструктуру ИПС и допускает включение страниц «Глубокой Паутины» в результаты поиска [12]. Часть «Глубокой Паутины» может быть доступна лишь в результате исполнения кода JavaScript, содержащегося в веб-странице, что создает дополнительные трудности и является предметом исследования в Google. Индексирование Flash-содержимого уже реализовано и не относится к «Глубокой Паутине». Для этого Adobe предоставляет средство для извлечения из Flash-роликов текста и ссылок. Полученные роботом веб-страницы могут быть непригодны для анализа и нуждаться в предварительной обработке. Причинами служат некорректный HTML-код, неверное указание текстовой кодировки или его отсутствие и многое другое. Выявление кодировки является предметом статистического анализа текста. В результате предварительной обработки в хранилище помещаются документы, приведенные к стандартной кодировке ИПС и соответствующие требованиям гипертекстовой разметки. Индексирование – выражение содержания документа и/или смысла информационного запроса на информационно-поисковом языке [ГОСТ 7.74]. Процесс индексирования может состоять из таких операций, как: отбор терминов, описывающих документ; взвешивание терминов в соответствии с предполагаемой важностью терминов; классификация и определение отношений между терминами. В большинстве ИПС для описания содержания документов и запросов используются полученные таким образом множества терминов с весами. Расчеты весовых коэффициентов обычно основаны на частоте появления данного термина в документе или частоте его появления во всех доступных документах, а также с учетом положения термина внутри документа (например, в заголовке) и взаимного расположения терминов в тексте. Во всех существующих методах индексирования применяется процедура исключения некоторых 10 высокочастотных терминов, которые заведомо не являются ценными для отражения содержания документа. Для исключения общеупотребительных слов, к которым относятся предлоги, союзы, артикли, вспомогательные глаголы, частицы, местоимения и т. п., используются стоп-словари. Стоп-словарь (стоп-лист, стоп-список, отрицательный словарь) – это словарь служебных и неинформативных терминов, которые не должны входить в число терминов индексации. Число служебных слов в отрицательном словаре составляет обычно несколько сотен, в зависимости от системы [9]. В контексте словарных ИПС под индексированием понимают построение индекса – структуры данных, пригодной для выполнения поисковых запросов с малыми вычислительными затратами. Индексом сокращенно называют обратный индекс – структуру данных, хранящую отображение из множества слов в множество документов. Прямой индекс – структура данных, хранящая отображение из множества документов в множество слов *перефразированные определения*[9]. Большинство современных алгоритмов индексации и поиска основано на векторной модели текста, предложенной Дж. Солтоном в 1973 году. В векторной модели каждому документу сопоставляется вектор терминов, размерность которого равна числу терминов, которыми можно воспользоваться при поиске, а элементы равны весам соответствующих терминов [9]. В их число могут входить и все не входящие в стоп-лист термины. Поисковый запрос также представляется в виде вектора весов терминов запроса. Близость документа к запросу оценивается как корреляция между векторами их описаний. Эта корреляция может быть вычислена, например, как скалярное произведение соответствующих векторов описаний [14]. При применении такого подхода к созданию ИПС для WWW, проявлялся следующий недостаток. Создатели веб-страниц имеют возможность включить в текст документа популярные термины поисковых запросов в неограниченном количестве, что необязательно соответствует содержанию документа. В результате ИПС переоценивала релевантность таких веб-страниц, тогда как пертинентность их оказывалась невелика. Разработчики Google предложили PageRank - оценку значимости веб-страниц, основанную на топологии сети ссылок в WWW. Идея заключается в предположении, что значимость веб-страницы тем выше, чем больше других веб-страниц содержит ссылки на нее и чем больше их собственная значимость [10]. Такая мера значимости страницы позволяет упорядочить ссылки в результате поиска. Многие ИПС при обработке поискового запроса учитывают морфологию языка, на котором составлен запрос. Это освобождает пользователя от применения специальных средств ИПЯ для указания необходимости поиска не только указанных слов, но и их 11 однокоренных или близких по смыслу. Яндекс не только применяет для поиска известные словоформы слов запроса, но и генерирует возможные варианты словоформ для неизвестных ему слов [http://company.yandex.ru/technology/mystem/]. !Здесь нужно что-то добавить об анализе семантики! 4. Методы решения задачи лексического анализа Будем предполагать, что слово (лексема) – это цепочка символов. Словарь хранит отображение из множества слов, являющихся ключами, во множество записей, представляющих произвольную дополнительную информацию. Целью лексического анализа документа является идентификация слов документа, то есть сопоставление каждому слову в документе соответствующей ему записи словаря. Для решения этой задачи требуются методы организации и поиска записи по ключу. Данная задача усложняется, если допустить, что текст может содержать слова с ошибками, опечатками, и другие отсутствующие в словаре лексемы. Требуется выполнять поиск записи не по точному ключу, а по приближенному в некотором смысле. Аргументом поиска (запрашиваемым ключом, запросом) будем называть слово, для которого требуется найти соответствующую запись в словаре. Пусть N - количество ключей в словаре. Поиск записи по точному ключу Очевидный способ поиска – последовательно перебирать ключи, останавливаясь, когда найден ключ, совпадающий с запрашиваемым. Сложность такого поиска составит в худшем случае O ( N ) операций сравнения ключей. Предположим, что распределение вероятности запросов поиска различных аргументов не является равномерным, т.е. вероятности поступления аргументов могут быть неравными. Например, Ципф установил, что в естественных языках n-е по частоте употреблений слово встречается с частотой, обратно пропорциональной n [Работа Ципфа]. Поиск в словаре каждого слова текста на естественном языке будет иметь аргументы, распределенные по Ципфу. Предварительно отсортируем ключи в порядке уменьшения частоты обращения к ним. Последовательный поиск в упорядоченном словаре будет выполняться примерно в 1 ln N раз быстрее, чем в неупорядоченном словаре [1]. 2 Рассматриваемые далее методы поиска требуют, чтобы над элементами словаря было определено отношение линейного порядка. !Добавить определение! 12 Бинарный поиск в упорядоченном массиве ключей имеет сложность O (log N ) . Вариации этого метода включают и поиск Фибоначчи. Он также имеет логарифмическую сложность, но меньший множитель [1]. Приведённые методы пригодны для словаря фиксированного размера, поскольку вставка и удаление элементов в массив записей с сохранением его упорядоченности трудоёмки. Для обеспечения возможности вставки и удаления записей словаря используют дополнительные структуры данных над множеством записей словаря. Вид таких структур данных представляют деревья поиска, хранящие в узлах записи словаря. Бинарное дерево поиска в точности соответствует бинарному поиску, однако оно неоптимально с точки зрения трудоемкости операций добавления и удаления записей – высота (длина наибольшего пути из корня в лист) такого дерева может достигать числа его узлов. Эту проблему решают методы, использующие оптимальные бинарные деревья. AVL-дерево и красно-черное дерево, являющиеся сбалансированными, позволяют выполнять основные операции (поиск элемента по ключу, вставка и удаление элемента) за логарифмическое время [2]. В качестве альтернативы сбалансированным деревьям В. Пух (W. Pugh) предложил слоёные списки (skip lists) [5]. Это результат применения вероятностного подхода к линейным спискам, дающий в среднем логарифмическое время работы для операций поиска, вставки и удаления записи. Для организации поиска записей словаря, хранящихся в низкоскоростной памяти, применяют методы, которые характеризует кластеризация записей для загрузки словаря в оперативную память порциями. B-дерево порядка m содержит в узлах наборы записей количеством до m. Они образуют страницы, которые удобно загружать с медленного носителя только при необходимости. Добавление и удаление записей затрагивает минимум страниц. Операции поиска, вставки и удаления записи занимают логарифмическое время [1, 2]. Методы цифрового поиска позволяют организовать выполнение поиска по префиксу аргумента, что может быть полезно для организации некоторых словарей. Подготавливается дерево, содержащее в узлах префиксы лексем. Метод PATRICIA (Practical Algorithm to Retrieve Information Coded in Alphanumeric) предназначен для работы с большими ключами переменной длины, исключает цепочки узлов с единственным потомком, что возможно для обычных префиксных деревьев [1, 4]. Известна комбинация двух последних методов, называемая строковым B-деревом (String B-Tree). Имея одинаковое быстродействие с B-деревом в худшем случае, она превосходит их теоретические ограничения [7]. 13 Направленный ациклический граф слов (directed acyclic word graph, DAWG), хранит в узлах не только общие префиксы, но и остальные общие подстроки, чем достигается экономия памяти [3]. Однако для применения всех этих методов требуется, чтобы аргумент вместо операции сравнения (требование ранее упомянутых подходов) давал возможность разбить его на составляющие – подстроки, отдельные биты и тому подобное. Во многих приложениях осуществить это требование затруднительно. Методы, основанные на хешировании, имеют хорошее время работы в среднем, но, в отличие от методов со сбалансированными деревьями, не обеспечивают удовлетворительную верхнюю границу времени поиска. Недостатком можно считать и необходимость заранее выделять область памяти под всю хеш-таблицу [1]. Поиск записи с ключом, близким к аргументу Если на множестве ключей задана метрика, то может быть поставлена задача о поиске записи по приблизительному ключу (поиск ближайшего соседа в N-мерном метрическом пространстве). Если в роли ключа выступает строка символов, то метрикой может быть выбрано редактирующее расстояние. !Добавить определение! Анти-полюсное дерево (anti-pole tree) позволяет кластеризовать множество ключей, группируя их по заданной метрике [6]. По построенному дереву за логарифмическое время можно выполнять поиск k ближайших ключей к заданному ключу, а также поиск ключей, лежащих не далее указанного расстояния. Для этой задачи пригодны вариации B-дерева [нужна ссылка, потерял]. Глава 2. Постановка задачи, исследование, решение План главы 1. Постановка задачи Описание существующего прототипа ИПС 1.1. Централизованная БД 1.1.1. Функциональная спецификация ИА 1.2. Основная задача: сбор текстовой информации из WWW 1.2.1. 1.2.1.1. Загрузка HTML-документов по протоколу HTTP 1.2.1.2. Работа с БД через TCP/IP 1.2.2. Предварительная обработка загруженных документов – в виде «сервисов». Перечислим их примеры: 14 Преобразование документов в плоский текст считается 1.2.2.1. выполненным 1.2.2.2. Лексический разбор (см. подпункт b) 1.2.2.3. Подготовка прямого индекса, векторная модель Спецификация среды времени выполнения 1.2.3. 1.2.3.1. Операционная система 1.2.3.2. Использование памяти и других вычислительных ресурсов 1.2.3.3. Выполнение в виде службы 1.2.3.4. Отказ от сторонних закрытых библиотек 1.2.4. Масштабируемость ИПС 1.2.5. Переносимость кода Задача лексического разбора 1.3. Спецификация входных данных 1.3.1. 1.3.1.1. Плоский текст 1.3.1.2. Словарь 1.3.1.2.1. Разработать формат хранения словаря на ПЗИ 1.3.1.2.2. Загрузка дополнительных элементов словаря 1.3.1.2.3. Выгрузка элементов словаря Цели лексического разбора 1.3.2. 1.3.2.1. Идентификация слов текста в словаре 1.3.2.2. Фильтрация семантически ненагруженных лексем Спецификация выходных данных 1.3.3. Разработать формат вывода результата лексического анализа 1.3.3.1. 2. Анализ Анализ методов лексического анализа 2.1. Удаление из текста семантически ненагруженных лексем 2.1.1. 2.1.1.1. Стоп-лист 2.1.1.2. Исследования Зипфа Обсуждение свойств лексического анализатора 2.2. 2.2.1. Оценка возможности хранения словаря в оперативной памяти целиком 2.2.2. Операции над записями словаря 2.2.2.1. Поиск 2.2.2.1.1. Точный 2.2.2.1.2. Приближенный 2.2.2.2. Вставка 15 Удаление 2.2.2.3. Анализ способов хранения словарных статей словаря и методов работы с ними 2.3. 2.3.1. Сравнение методов 2.3.2. Описание метода поиска 2.3.3. Теоретическая оценка эффективности Разработка способа хранения результата лексического разбора 2.4. 2.4.1. Необходимость передачи результата вовне анализатора 3. Проектирование Разработка архитектуры ИА, ИПС, позволяющей решить поставленную задачу 3.1. 3.1.1. Центральная БД 3.1.2. Автономные ИА Проектирование ИА 3.2. 3.2.1. Модуль словаря 3.2.2. Интерфейс с БД и Интернет 3.2.3. Параллельная работа экземпляров робота Результат проектирования: UML-диаграммы 3.3. 4. Реализация 4.1. Выбор языка и средств разработки 4.2. Реализация интерфейса с БД 4.3. Работа с Интернет Выбор sockets как переносимого интерфейса для работы с TCP/IP 4.3.2. Использование протокола HTTP 4.4. 4.3.1. Конфигурация, служебные свойства робота 1. Постановка задачи Требуется расширить возможности существующей ИПС. Она состоит из базы данных (БД), служащей для централизованного хранения и обмена информацией, и модулей различного назначения, таких как прототип робота для сбора информации, анализаторы, пользовательский интерфейс. Целью работы является создание модуля информационного агента (ИА) ИПС. Он должен осуществлять сбор информации из WWW и выполнять её предварительную обработку. Сбор информации должен производиться следующим образом. ИА получает список URL документов из БД. Выполняется их загрузка из WWW по протоколу HTTP. 16 Затем ИА при помощи дополнительных сервисов обрабатывает загруженные документы. В их число могут входить: Преобразователь документов в плоский текст Лексический анализатор Статистический анализатор для представления документов в векторной модели Другие средства обработки документов Результаты обработки должны сохраняться в БД. Взаимодействие с БД должно производиться по протоколам семейства TCP/IP. Программные модули ИА должны исполняться на ПК под управлением ОС Windows. Должна быть возможность задать максимальный объем потребляемой оперативной памяти. Нельзя использовать библиотеки сторонних разработчиков с закрытым исходным кодом. Архитектура ИА должна предусматривать параллельную работу нескольких его экземпляров таким образом, чтобы исключить какие-либо из возможных конфликтов совместного доступа к БД, равно как и дублирование работы друг друга. При этом экземпляры ИА могут быть запущены одновременно как на одном, так и на нескольких ПК. Исходный код ИА должен быть переносимым, допуская сборку программы для исполнения под управлением ОС Linux. Как составную часть работы над ИА, необходимо создать модуль, реализующий сервис лексического анализа. Входными данными для него будут служить словарь и документ. Словарь представляет собой множество записей. Каждая запись содержит слово в качестве ключа и некоторые дополнительные данные («словарная статья», коэффициент семантической значимости лексемы и любую другую информацию, связанную со словомключом записи). Способ хранения словаря может варьироваться. В качестве рабочего варианта для хранения словаря в рамках данной работы будет использоваться текстовый файл, содержащий слова-ключи, разделенные символами перевода строки. Разработать формат хранения словаря на внешнем запоминающем устройстве (ВЗУ). Обеспечить добавление или удаление записей словаря в процессе работы лексического анализатора. Считать, что документы перед лексическим анализом уже преобразованы в плоский текст одним из сервисов. Далее в контексте лексического анализатора будем под документом понимать плоский текст, полученный из него. Целью лексического анализа является идентификация слов входного документа (лексем). То есть, каждому слову текста должна быть сопоставлена словарная статья. Если 17 соответствующей слову записи в словаре не обнаружено, данное слово отмечается как неопознанное. Дополнительной задачей является фильтрация семантически ненагруженных лексем. Выходными данными лексического анализатора служит последовательность ссылок или идентификаторов записей словаря, обеспечивающих непосредственный (без поиска) доступ к их дополнительной информации. Модульная архитектура ИПС ставит еще одну дополнительную задачу: разработать подходящий формат передачи выходных данных другим модулям ИПС. 2. Анализ Фильтрация текста В процессе лексического анализа целесообразно отфильтровать элементы текста, которые не понадобятся при дальнейшей обработке документа. Такими элементами для нашей задачи являются знаки препинания, числа, слова-сокращения и др. Точнее, фильтроваться должны все цепочки символов, не принадлежащие множеству ключей словаря. Для оценивания коэффициента релевантности документа желательно учитывать в нем, по возможности, только семантически нагруженные лексемы, то есть те, что несут смысловую нагрузку в тексте, а не являются связующими. Соответственно, семантически незначимые лексемы (СНЛ) следует удалить уже на стадии лексического анализа. Упорядочим слова текста в порядке убывания количества их вхождений в текст, то есть частоты. Порядковый номер слова в таком упорядочении называется рангом слова. Дж. К. Зипф установил, что семантически значимыми можно считать слова, чьи ранги принадлежат некоторому диапазону [17]. Рисунок 2 18 Семантическая значимость лексемы не является одинаковой для различных предметных областей, к которым относится тематика текста. Следовательно, если перед лексическим анализом документа задать предметную область, в рамках которой впоследствии будут выполняться поисковые запросы, то окажется возможным адаптивно оценивать семантическую значимость лексем. То есть, значимость отдельной лексемы будет зависеть от выбора предметной области. Указание предметной области не является обязательным. Будем называть стоп-списком множество лексем, подлежащих фильтрации. Таким образом, в него войдут СНЛ для выбранной предметной области, и, возможно, другие лексемы. Целесообразно хранить признак семантической значимости лексемы в поле дополнительной информации соответствующей записи словаря. Либо вообще хранить в словаре лишь семантически значимые лексемы, то есть использовать различные словари для разных предметных областей. Остальные лексемы в этом случае не будут распознаны лексическим анализатором и будут отфильтрованы. Ограничение памяти Оценим объем оперативной памяти, требуемый для хранения словаря. Приближенный поиск 1. Постановка задачи «обиходным» языком 2. Метрика Левенштейна 3. Метрическое пространство строк 4. Постановка задачи поиска по диапазону в метрическом пространстве 5. Обзор методов, сравнительная таблица 6. Описание BK-дерева и алгоритмов, точный поиск Сравнение строк Поскольку входными данными для лексического анализатора являются тексты вебстраниц, созданные человеком, они могут содержать слова с орфографическими ошибками или опечатками. Причем, по предварительным наблюдениям, доля таких слов относительно невелика. Тем не менее, для того, чтобы не лишаться доли информации текста, необходимо при лексическом анализе распознавать и такие слова. Следует, однако, учитывать, что перед нами стоит задача не только исправления опечаток, но и распознавания неизвестных (отсутствующих в словаре) словоформ. Другой трудностью, с которой мы сталкиваемся при использовании для лексического анализа 19 только точного поиска по словарю, являются слова и словоформы, отсутствующие в словаре. Будем называть такие слова неизвестными. Долю неизвестных слов можно уменьшить, дополняя словарь, однако это требует участия человека (оператора). Указанные обстоятельства показывают, что улучшить работу лексического анализатора, повысив долю распознанных лексем, можно, реализовав приближенный поиск по словарю. Итак, задачу можно сформулировать следующим образом. Дан словарь; обеспечить эффективный поиск записей словаря, с ключами, близких в некотором смысле к слову-запросу. Дамерау утверждает, что 80 процентов опечаток исправляется при помощи одной операции редактирования [19]. Определим, что такое близость (сходство) ключа записи к запросу. Будем считаем близкими: слово с опечаткой и то же слово в правильном написании: «shound» и «sound» две словоформы одной и той же основы: «arrogance» - известная и «arrogancy» неизвестная (устаревшая форма написания). Считаем, что у нас нет дополнительной информации о морфологии слов (это задача других модулей ИПС). Только корректная форма в словаре. Для указанных случаев в качестве меры близости (функция сходства) двух слов (хранящихся как строки), хорошо подходят метрика Левенштейна [21], она же «редактирующее расстояние», или метрика Дамерау [19]. Пусть - конечный алфавит. Пусть * - это множество цепочек (строк) в алфавите . Обозначим через U * множество строк конечной длины в алфавите . Метрика Левенштейна определяется следующим образом. Рассмотрим операции редактирования строки: Вставка символа ( , a ) Удаление символа (a, ) Замена символа (a, b), a b Если расширить этот набор еще одной операцией: Перестановка соседних символов (ab, ba ), a b (при условии, что эти символы являются смежными в обеих словах), то получим метрику Дамерау [19]. Каждой операции сопоставлена стоимость, обычно равная 1. Стоимость последовательности операций равна сумме стоимостей операций, входящих в последовательность. Редактирующее расстояние (далее – просто расстояние) 20 d ( x, y ) : U U между строками x и y определяется минимальной стоимостью последовательности операций редактирования, преобразующих строку x в y . Функция редактирующего расстояния удовлетворяет свойствам метрики: 1. Нулевое расстояние, рефлексивность правильно назвать: d ( x, y ) 0 x y 2. Неотрицательность: x, y U d ( x, y ) 0 (следует из остальных свойств) 3. Симметричность: x, y U d ( x, y ) d ( y, x ) 4. Неравенство треугольника: x, y , z U d ( x, z ) d ( x, y ) d ( y , z ) (делает расстояние метрикой) Таким образом, множество конечных строк вместе с метрикой Левенштейна образуют метрическое пространство M (U , d ) . Свойство: 0 d ( x, y ) max( x ; y ) . TODO Алгоритм вычисления. См. [22], [Обзор] [Full-text online search] A Guided Tour to Approximate String Matching.pdf стр. 43. Поиск в метрических пространствах Выполнив метризацию пространства поиска, указав метрику на множестве поиска, задачу приближенного поиска в словаре можно (формально) переформулировать следующим образом. Поиск по диапазону (Range search). Даны множество (элементов метрического пространства) корректно ли? U и запрос q . Найти все элементы, находящиеся на расстоянии не более r от q , т.е. множество {u U : d ( q, u ) r} . Смежной задачей поиска в метрическом пространстве является задача k-й Ближайший сосед (k-Nearest Neighbor, k-NN): найти k ближайших к q элементов множества U . В ряде работ различных авторов рассматриваются частные случаи поставленных задач. Перечислим основные направления исследований и результаты. (Рассмотрим методы решения задач, чтобы найти наиболее подходящий.) Многомерные (конечномерные) векторные пространства. Специализированные методы используют дополнительную информацию о координатах. Разработаны оптимальные алгоритмы поиска ближайшего соседа (точки). Среди наиболее популярных: kd-деревья, R-деревья, quad-деревья, X-деревья. С ростом числа измерений вычислительная трудоемкость подсчета расстояния сильно возрастает. Поскольку методы для векторных пространств хорошо исследованы, часто к ним пытаются свести задачи на объектах другой природы, таких как изображения (которые затруднительно сравнивать как векторы) или строки, считает Чавез (Edgar Chavez) [23]. Однако существующие методы чрезвычайно 21 чувствительны к размерности векторного пространства. Алгоритмы поиска ближайшего соседа и поиска по диапазону зависят от неё экспоненциально («curse of dimensionality», «проклятие мерности») [23]. Отображение метрических пространств в векторные, так называемое проецирование [23]. Целью является найти отображение объектов исходного метрического пространства в некоторое векторное пространство, в котором вычисление метрики вычисляется эффективнее. Просто метрические пространства (general metric spaces). Известны результаты успешного применения методов, использующих только информацию о расстоянии, для векторных пространств (M-деревья) [23]. Классификация по: o Функции расстояния: Случай непрерывной функции расстояния Случай дискретной функции расстояния o По типу структуры данных: Древовидные Прочие В таблице представлены актуальные алгоритмы поиска в метрических пространствах в соответствии с обзором [23] и их основные характеристики. Сокр. назв. BKT FQT FHQT FQA VPT MVPT VPF BST GHT GNAT VT MT SAT AT AESA LC Полное назавание Древовидная Дискрет. d Burkhard–Keller tree + + fixed queries tree + + fixed-height fixed queries tree + + fixed queries array + vantage-point tree + multi-vantage-point tree + vantage point forest + bisector tree + generalized-hyperplane tree + geometric near-neighbor access tree + Voronoi tree + M-tree + spatial approximation tree + antipole tree + approximating eliminating search algorithm list of clusters - Сложн. по памяти Θ(n ) O(n logn ) O(nh ) Θ(nhb ) Θ(n ) Θ(n ) Θ(n ) Θ(n ) Θ(n ) Θ(nm^2 ) Θ(n ) Θ(n ) Θ(n ) ? Θ(n^2 ) Θ(n ) Сложн. по времени n^ α n^ α logn^b logn^b logn^c logn^c n^(1-α) logn^c n^(1- Θ(1/ loglogn)) O(1)^d - Таблица 1 Учитывая, что в задаче поиска по словарю мы имеем дело со строками в качестве объектов и редактирующим расстоянием в качестве метрики, рассматривать следует методы, ориентированные на дискретную метрику и обычное (не векторное) метрическое пространство: BKT, FQT, FHQT, FQA. Будем обозначать символом U множество объектов, на котором необходимо организовать поиск, U M . 22 Метод BurkHard-Keller tree Является одним из первых методов поиска в метрическом пространстве. Предложен в [24], «File Structure 1». Метод включает в себя два этапа: предварительная обработка множества поиска и поиск. В процессе предварительной обработки из объектов множества поиска строится поисковая структура данных – BK-дерево. Это ориентированное [Новиков] дерево. Каждый узел node хранит ключ key[node] – элемент метрического пространства и имеет некоторое количество дочерних узлов child i [node] , которым сопоставлены натуральные номера. Построение BK-дерева с корневым узлом node для множества P выполняется в соответствии со следующей рекурсивной процедурой. BUILD( V , node ) p x V {выбираем произвольный элемент множества} key[node] p i 0 {строим разбиение V на подмножества Vi } Vi {v V : d (v, p) i} { d (v, p ) вычисляет расстояние} Vi BUILD( Vi , childi [node] ) { i -ое поддерево строится для U i } На каждом шаге текущее множество V разбивается на конечное число подмножеств Vi {v V : d (v, p) i} , состоящих из элементов, находящихся на расстоянии ровно i от элемента, сохраненного в текущем узле node . i -ый дочерний узел является корнем поддерева, хранящего элементы из Vi . На рисунке Рисунок 3показан пример BK-дерева для множества строк {tree, trie, till, true, free, look, lift} и расстояния Левенштейна в качестве метрики. tree 1 trie 1 true 3 4 till 2 look 3 free lift Рисунок 3 Вставка узла x с некоторым ключом в BK-дерево T . 23 INSERT( T , x ) cur root[T ] while(cur NIL) dist ED (cur, x ) Виды приближенного поиска в метрических пространствах (см. Лифшиц): Он самый В евклидовых Приближенный в том смысле, что результат не будет лежать в точном радиусе o LSH Источник: [18]. Рассматривается онлайн-поиск (т.е. не допускается предварительная обработка текста). Расстояние – дискретно. Пространство поиска – метрическое, но не многомерное. Пространство поиска не является Евклидовым. Вычислительная сложность различных алгоритмов приближенного поиска сильно зависит от модели, принятой для вычисления ошибки между запросом и текстом, или расстояния между строками. Поэтому следует рассматривать узкий класс ошибок. В отличие от многомерных пространств, вычисление расстояния между словами не так дорого (?). Диапазон поиска имеет смысл принимать не больший 2, иначе слишком много результатов. Для возможности реализации поисковой структуры для больших файлов данных, не помещающихся в оперативную память, следует отдать предпочтение методам, которые при поиске не требуют сравнения с ключами всех записей. То есть, чем меньше сравнений – тем лучше. Идея: метризация пространства поиска. Метрика должна удовлетворять: Неотрицательность Симметричность Identity Неравенство треугольника. Если его нет, то образуются пространства «похожести» В качестве подходящей модели выбрана метрика Левенштейна, называемая иначе редактирующее расстояние. Различают обобщенное редактирующее расстояние, когда операции удаления, вставки и замещения имеют произвольные веса, и (простое) 24 редактирующее расстояние, для которого упомянутые операции имеют стоимость, равную 1. Еще существует метрика Хемминга для побитового сравнения. Годится для чисел или бинарных данных. Польза эффективного алгоритма поиска по неиндексированному тексту состоит в том, что построение индекса может само по себе быть дорогостоящей операцией. Память, занимаемая индексом. Переменчивость текста. Структуры данных различаются тем, требуется ли дискретная или непрерывная функция расстояния. Применение первых выигрывает благодаря тому, что используется информация о том, на каком именно расстоянии находится объект. BK-дерево обеспечивает [20]: Логарифмическую сложность точного поиска Степенную сложность (со степенью меньше 1) для поиска kNN при k=1,2 7. Проектирование 8. Реализация Дан словарь лексем естественного языка. Входной текст может содержать слова из словаря, возможно, с опечатками, а также слова и словоформы, отсутствующие в словаре. Идентифицировать каждое слово как: лексему из словаря o точные совпадения слов из словаря o словоформы вероятно, лексему из словаря с ошибкой лексему, отсутствующую в словаре Сразу следует отметить ограничения. Словарь не будет часто изменяться. Программа должна предусматривать предварительное задание максимального объема памяти, которое ей разрешено занимать. Лексический анализ Разобрать входной текст в последовательность лексем данного словаря. 25 Практические применения Автоматизированный перевод текстов. Фильтрация страниц по признаку. Контекстная реклама. Список литературы 1. Кнут Д. Искусство программирования, том 3. Сортировка и поиск, 2-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005 2. Кормен Т., Лейзерсон Ч., Ривест Р., Штайн К. Алгоритмы: построение и анализ, 2-е изд.: Пер. с англ. – М.: Издательский дом «Вильямс», 2005 3. http://en.wikipedia.org/wiki/Acyclic_deterministic_finite_automaton#Applications 4. Donald R. Morrison, PATRICIA—Practical Algorithm To Retrieve Information Coded in Alphanumeric, Journal of the ACM (JACM), v.15 n.4, p.514-534, Oct. 1968 5. William Pugh, Skip lists: a probabilistic alternative to balanced trees, Communications of the ACM, v.33 n.6, p.668-676, June 1990 6. Domenico Cantone , Alfredo Ferro , Alfredo Pulvirenti , Diego Reforgiato Recupero , Dennis Shasha, Antipole Tree Indexing to Support Range Search and K-Nearest Neighbor Search in Metric Spaces, IEEE Transactions on Knowledge and Data Engineering, v.17 n.4, p.535-550, April 2005 7. Paolo Ferragina , Roberto Grossi, The string B-tree: a new data structure for string search in external memory and its applications, Journal of the ACM (JACM), v.46 n.2, p.236280, March 1999 8. Tim Berners-Lee, Information Management: A Proposal, CERN, March 1989, May 1990 9. В.К. Иванов, К.В. Иванов, Введение в информационно-поисковые системы. (http://window.edu.ru/window_catalog/pdf2txt?p_id=28415) 10. Sergey Brin, Lawrence PageThe, Anatomy of a Large-Scale Hypertextual Web Search Engine (http://infolab.stanford.edu/~backrub/google.html) 11. Martijn Koster, A Standard for Robot Exclusion (http://www.robotstxt.org/orig.html) 12. Michael Cafarella, Edward Chang, Andrew Fikes, Alon Halevy, Wilson Hsieh, Alberto Lerner, Jayant Madhavan, S. Muthukrishnan. Data Management Projects at Google. SIGMOD Record, March 2008 (Vol. 37, No. 14) (http://www.sigmod.org/sigmod/record/issues/0803/p34.centers-google.pdf) 13. sitemaps.org (http://www.sitemaps.org/index.php) 14. И. Некрестьянинов, Тематико-ориентированные методы информационного поиска, СПбГУ, 2000 26 15. Definition of "Internet" (http://www.nitrd.gov/fnc/Internet_res.html) 16. Robert H'obbes' Zakon, Hobbes' Internet Timeline v8.2 (http://www.zakon.org/robert/internet/timeline/#Growth) 17. А. Попов, Поиск в Интернете - внутри и снаружи. Эффективная методика поиска информации в сети Интернет (http://www.citforum.ru/pp/search_03.shtml) 18. Gonzalo Navarro. A guided tour to approximate string matching. ACM Computing Surveys (CSUR) archive, Volume 33, Issue 1 (March 2001), Pages: 31 – 88 19. Damerau, F. 1964. A technique for computer detection and correction of spelling errors. Commun. ACM 7, 3, 171–176 20. Ricardo Baeza-Yates, Gonzalo Navarro. Fast approximate string matching in a dictionary, 1998 21. В.И. Левенштейн (1965) Двоичные коды с исправлением выпадений, вставок и замещений символов. Доклады Академий Наук СССР 163.4:845–848. Appeared in English as: V. I. Levenshtein, Binary codes capable of correcting deletions, insertions, and reversals. Soviet Physics Doklady 10 (1966):707–710 22. Graham A. Stephen. 1992. String search. Technical report, School of Electronic Engineering Science, University College of North Wales, Gwynedd 23. E. Chavez, G. Navarro, R.A. Baeza-Yates, J.L. Marroquin, Searching in metric spaces, 2001. ACM Computing Surveys (CSUR) Volume 33, Issue 3 (September 2001), Pages: 273 – 321 24. Burkhard, W. and Keller, R. 1973. Some approaches to best-match file searching. Commun. ACM 16, 4, 230–236. 27