Искусственный интеллект. Строки, контекст и волны на Паскале. Сергей Соболенко
Читать онлайн книгу.В «клоне» строки, размеченной полученным кодом мы находим искомый шаблон.
3. Поскольку длина клонированной строки и исходной не отличается, указание на позицию шаблона укажет на позицию первого нужного нам символа в исходной строке и общее количество символов.
Илл. 38. Функция Shablon – определяет наличие в строке шаблона поиска, и возвращает подстроку s2 с указанным в шаблоне фрагментом текста.
Как видно, функция довольно проста, но здесь были использованы некоторые жизненные «лайфхаки». Поскольку бывает довольно сложно проконтролировать всю палитру диапазонов таблицы символов, здесь введена дополнительная переменная логического типа «plus», которая содержит информацию, об использовании очередного символа из строки в шаблоне. Если мы пропустили какой-то символ (if plus=false) после проверки всех полезных для нас вариантов, тогда мы добавляем символ кода «5» в S3 (там может оказаться псевдографика, командные символы и т.п.). В таком случае длина строки, содержащая код шаблона S3 не будет отличаться от исходной S. Также, для того, чтобы каждый раз не проверять код текущего символа из исходника S, мы присвоили его значение переменной j, что ускоряет время исполнения.
По окончании кодирования строки, мы выполняем поиск подстроки SS в полученной строке S3, и копируем фрагмент из реальной строки S с позиции строки полученного шаблона S3 и с длиной подстроки шаблона SS. Фрагмент «S2:=copy (s, pos (ss, s3), length (ss));»
Проверим корректность процедуры:
Илл. 39. Проверка функции shablon в программе.
И вот результат:
Илл. 40. Результат работы программы с использованием функции shablon.
Функция шаблона с различными модификациями незаменима для парсинга неформализованных данных. К примеру, она подходит для поиска даты рождения, номеров телефонов, домашних адресов, номеров документов, временных периодов трудового стажа и других сведений из текстовых файлов резюме, которые впоследствии могут быть внесены в стандартную форму и нужным образом исправлены.
Но предположим, что пользователь написал дату рождения с лишним пробелом. Например так, 02.12. 1962. Как можно предположить подобную ситуацию и исправить ее автоматически?
Конечно же, во-первых, нам следует убедиться, что имелась ввиду именно дата рождения а не период работы или дата составления резюме. На это могут указывать сопутствующие данные: фрагменты слов в строке с «род», «рожд», «г.р» или «д.р». Убедившись, мы используем ту же функцию shablon, но с некоторой модификацией, которая может получать числовую информацию, игнорируя степень разреженности между числовыми символами.
Так, функция clearshablon в случае необходимости игнорирует наличие или отсутствие в строке дополнительных пробелов, благодаря нескольким операторам, добавленным в функцию shablon и пользуясь описанной выше процедурой insinstring.
Илл. 41. Функция clearshablon – осуществляет поиск шаблона