Рецензия на бакалаврскую работу Столпнера Льва Артемовича ========================================================= Столпнер Л.А. посвятил свою работу разработке и реализации алгоритма поиска подстроки (образца) в строке, причем имеется в виду так называемый нечёткий поиск (fuzzy string search), который означает, что ищутся все подстроки, которые «почти» совпадают с образцом. Работа содержит довольно подробный обзор имеющихся технологий и алгоритмов. Львиную долю обзора заняло обсуждение приложения DocLine, стать частью которой претендует представляемый алгоритм. Оставшаяся часть обзора посвящена обсуждению известных алгоритмов с индексацией и без индексации, предназначенных для собственно поиска, точнее говоря, эти алгоритмы перечисляются. Правда, обзор всё же содержит рассуждения о том, почему алгоритмы без индексации лучше подходят для использования их в приложениях, исполняющихся в реальном времени. Основная часть работы содержит описание предлагаемого алгоритма, который представляет собой алгоритм Рабина-Карпа, подвергшийся следующим модификациям: 1) изменен процесс вычисления значений hash-функции; 2) каждая подстрока, значение hash-функции на которой совпадает со значением hash-функции образца, сравнивается с образцом, причем при сравнении используется вычисление редакционного расстояния между ними (под редакционным расстоянием здесь понимается количество операций вставки, замены и удаления, необходимых для получения подстроки из образца). В качестве алгоритма вычисления редакционного расстояния была выбрана модификация Укконена метода динамического программирования, который изначально был приспособлен для этой цели Вагнером и Фишером. Таким образом, в работе предлагается трёхфазный алгоритм: вычисление значения hash-функции, нечёткий поиск на основе редакционного расстояния и, наконец, точный поиск. Описанный в работе алгоритм реализован в среде .NET на языке C# с использованием библиотеки лемматизации (LemmaGen) и библиотеки стемминга (StemmersNet), которые необходимы для предварительной обработки текстов, например, потому, что исходные документы хранятся приложением DocLine в виде XML-документов. На мой взгляд, использование библиотеки LemmaGen ориентирует всю систему на написание текстов на английском языке. Для того, чтобы допустить русскоязычные тексты, необходимо написать свою собственную библиотеку лемматизации. Не буду заострять внимание на некотором количестве пунктуационных ошибок, щедро раскиданных по тексту дипломной работы. Хочется отметить лишь, что чтение представленного текста работы не всегда просто, в частности, по причине не слишком удачного представления материала и некоторых повторений похожего текста в разных разделах. Тем не менее описанный алгоритм отлажен, что отражено в разделе "Эксперименты". Кстати, этот раздел работы достаточно информативен. Осталось неясно, были ли попытки внедрить реализованный алгоритм в состав приложения DocLine, и сколь успешными они оказались. Кроме того, хотелось бы понять, сравнивалась ли представленная реализация с алгоритмом поиска клонов, который, конечно же, уже есть в приложении DocLine. Невзирая на перечисленные замечания, считаю, что представленная работа может претендовать на оценку ОТЛИЧНО, а Лев Артемович Столпнер заслуживает присвоения ему квалификации бакалавра. Главный конструктор ЗАО "Ланит-Терком" Н.Н. Вояковская