Искусственный интеллект. Строки, контекст и волны на Паскале. Сергей Соболенко

Читать онлайн книгу.

Искусственный интеллект. Строки, контекст и волны на Паскале - Сергей Соболенко


Скачать книгу
слово, (например, слово «быть» в строке «быть или не быть»), процедуру следует повторить. Поскольку нам неизвестно, сколько раз во фразе может встретиться слово (или символ, или группа символов), один, три раза или 100 раз, мы можем усовершенствовать процедуру для того, чтобы она заменяла их все до тех пор, пока искомой подстроки в строке не останется. Здесь можно применить цикл Repeat с условием выхода.

      Видоизменим процедуру InsInString, добавив цикл.

      Илл. 22. Усовершенствованная процедура InInstring прекращает заменять подстроку только тогда, когда заменять остается нечего.

      Еще одним необходимым элементом нормализации текста является его преобразование из строчного написания в заглавное для удобства последующего оперирования.27

      То есть наша строка «Мама мыла раму» после обработки должна выглядеть как «МАМА МЫЛА РАМУ», где все буквы являются прописными, большими.

      Приведенная ниже процедура Getups преобразует строку таким образом, что все символы, написанные строчными буквами становятся прописными, а все прочие символы – копирует в той же позиции. Для этого процедура, которая работает со строкой использует другую процедуру, (Getup), которая производит ту же операцию, но на уровне 1 символа.

      Илл. 23. Процедуры «поднятия» букв из строчных в прописные GetUps (для строк) и GetUp (для отдельного символа).

      Ознакомившись с ними вы можете сделать вывод о принципе их работы. Чтобы не заменять все буквы по одной, процедура GetUp работает с диапазонами кодировок символов, меняя их нужным образом. В данном случае это уже упомянутые диапазоны кодировки DOS: английские строчные буквы от a до z (коды 97—122) и русские строчные буквы от а до я (коды 160—175, 224—239). Определив «попадание» в строчную кодировку мы уже знаем, в какую «сторону» и на какое число следует изменить код, вычесть или прибавить. В частности, для изменения английских строчных символов из кода символа вычитается число 32; а в русских, – до буквы «п» также вычитается 32, с буквы «р» – вычитается 80.

      Поскольку процедура Getups изначально готовилась как процедура нормализации, по своему опыту в ней сразу использовались и дополнительные подготовительные элементы как вложенная процедура Deldbspace – удаления двойных и тройных пробелов, а также пробелов, стоящих перед началом и в конце строки:

      Илл.24. Процедура «очистки» строки от двойных-тройных пробелов, а также пробелов в начале и в конце строки.

      Теперь постараемся подытожить то, что мы получили.

      С помощью описанных процедур мы можем нормализовать текст, используя буквально несколько операторов.

      Вернемся к нашей проблеме с кодировкой, но теперь будем во всеоружии:

      Илл. 25. Обработка ненормализованной строки из кодировки Win, которая содержит лишние пробелы.

      Здесь исходная строка написана в кодировке Win и содержит лишние пробелы. Мы перекодируем ее в кодировку DOS, с помощью процедуры Decodetodos, переводим в верхний регистр (и убираем лишние


Скачать книгу

<p>27</p>

К сожалению, предусмотренная для таких операций функция Паскаля Upcase (k) (где k – переменная символьного типа Char) работает практически всегда только с англоязычными символами.