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

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

СКАЧАТЬ style="font-size:15px;">      92

      подавляющее большинство

      92

      100

      почти все

      100

      100

      все

      100

      10000000

      более 100%»

      Теперь приступим к сборке и рассмотрим происходящее подробнее.

      В процедуре нам потребовалось много строковых переменных для текущих операций (S-S8), две переменные для хранения диапазона (N2 и N3), одна – для текущего показателя (N типа Real), одна – символьного типа (C), одна переменная для связи файла (F типа Text), и две – логического типа (Boolean) для контроля над текущим состоянием операции (b и tryfalse).

      Илл.30. Процедура LogicPercent, дополняющая числовые данные процентов различными фразеологизмами.

      На вход в процедуру мы имеем строку S, к обработке которой приступаем в случае нахождения в ней символа «%». В цикле меняется значение текущего символа S [i], и если мы встречаем обычные буквы или иные символы, то устанавливаем текущее значение tryfalse=true.

      Если же нам встречается число или символы дроби, то мы храним его в переменной S3, поскольку оно может оказаться, а может и не оказаться процентом. Логический указатель числа («нужного» символа) устанавливаем на B=true, и отменяем значение «ненужного» символа TryFalse=false. Также мы дублируем это значение в переменной S8.

      Встретив символ процента, цикл завершается. Мы преобразуем значение строковой переменной S3 в число N. Результат преобразования j мы игнорируем, поскольку контролировали код символов и уверены в числовом содержимом переменной. Поэтому используем в дальнейшем j как хранилище для округленного значения N (Round (N)).

      Затем мы открываем файл словаря значений DictPer. txt, читаем его по 3 строки сразу, причем первые два «читаем» как числа (N2 и N3) с которыми сравниваем текущее число значения j. Если число j попадает в промежуток между указанными числами, нами используется символьное выражение из файла s6, которое мы не забываем переводить в кодировку DOS (процедура decodetodos).

      Теперь протестируем готовую процедуру в следующей программе.

      Илл. 31. Программа для тестирования процедуры LogicPercent.

      Илл. 32. Пример работы процедуры LogicPercent.

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

      Сложное сравнение

      Предположим что нам необходимо выбрать из десятка слов два, наиболее похожих. Но что, если все они разные и простое сравнение не работает? Если самыми похожими окажутся, например, «ковровая» и «ковровый»? «Хлебный» и «хлебо-булочный»? «Эволюция» и «конституция»? В данных случаях поможет функция сложного сравнения сходства.

      Для начала поговорим о стратегии алгоритма. Мы могли бы здесь посчитать простое количество попаданий букв одной строки в другую, однако это исключает вероятность оценки сходства суффиксов и окончаний слов, как в последнем нашем примере с «эволюцией» и «конституцией». Судите сами.

      эволюция

      конституция

      Если мы начнем перебирать индексы букв этих слов с «головы», сравнивать их последовательно [1, 2, 3, 4, 5…], то ни одного раза не получим совпадения:

СКАЧАТЬ