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

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

СКАЧАТЬ уже упоминалось, Win-кодировка текстового файла отличается от DOS-кодировки, но она необходима для получения данных из открытых источников и удобства представления данных.

      Нормализация строк

      Для перекодировки строки текста из кодировки Win в DOS нам потребуется следующая процедура DecodeToDOS:

      Илл. 18. Процедура для декодирования строки из стандартной кодировки Win в DOS.

      Соответственно, обратно из кодировки DOS мы можем «перегнать» текст в кодировку Win (например, для записи в файл).

      Илл. 19. Процедура для декодирования строки из стандартной кодировки DOS в кодировку Win.

      Также, нам может потребоваться перекодирование не строки (из Win в DOS), а отдельного символа, в этом случае мы используем процедуру DecodeToDOSC:

      Илл. 20. Преобразование из кодировки Win в кодировку Dos отдельного символа.

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

      Далее, говоря об обработке строковых данных нам регулярно будет требоваться процедура замены подстроки в строке, как приведенная ниже InsInString:

      Илл. 21. Замена подстроки в строке на нужный набор символов в процедуре InsInString происходит благодаря несложной конструкции из функций Pos, Length и Copy.

      Как она работает. Переменная i получает позицию нахождения подстроки S2 в строке S. Если при этом позиция находится не на первом символе, в строку результата S4 копируется фрагмент строки до указанной позиции (фрагмент Copy (S,1,i-1), к нему прибавляется «слово» -замена S3, и оставшийся фрагмент текста за минусом уже полученного фрагмента с учетом стоявшего ранее на этом месте слова (фрагмент Copy (s,i+length (s2),length (s) -length (s2) -i+1)).

      В операции замены первого слова есть небольшое различие – первым сразу становится подстрока замены S3.

      Предположим, в строке «Мама мыла раму» нам необходимо заменить слово «раму» на «окно».

      Замена производится в одно действие:

      В данном случае переменная s2 получит измененную строку «Мама мыла окно». А в случае, если искомая подстрока не будет найдена, переменная S4 вернет в программу исходную строку S.

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

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

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

      Еще СКАЧАТЬ