Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kernigan_paik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.91 Mб
Скачать

3.1. Алгоритм цепей Маркова

Элегантный способ выполнить подобную обработку — использовать технику, известную как алгоритм цепей Маркова4. Ввод можно представить себе как последовательность перекрывающихся фраз; алгоритм разделяет каждую фразу на две части: префикс, состоящий из несколь­ких слов, и следующее за ним слово — суффикс (или окончание). Алго­ритм цепей Маркова создает выходные фразы, выбирая случайным об­разом суффикс, следующий за префиксом; все это в соответствии со статистикой текста-оригинала (в нашем случае). Хорошо выглядят фра­зы из трех слов, когда префикс из двух слов используется для подбора слова-суффикса:

присвоить w1, и w-2 значения двух первых слов текста

печатать w1, и w2

цикл:

случайным образом выбрать w3 из слов,

следующих за префиксом w1< w2 в тексте

печатать w3

заменить w1, и w2 на w2 и w3

повторить цикл

Для иллюстрации сгенерируем случайный текст, основываясь на не­скольких предложениях из эпиграфа к этой главе и используя префикс из двух слов:

Show your flowcharts and conceal your tables and I will be

mystified. Show your tables and your flowcharts will be obvious, (end)

Вот несколько пар слов, взятых из этого отрывка, и слова, которые еле дуют за ними:

Префикс Подходящие суффиксы

Show your flowcharts tables

your flowcharts and will

flowcharts and conceal

flowcharts will be

your tables and and

will be mystified, obvious.

be mystified Show

be obvious (end)

Обработка этого текста по предлагаемому алгоритму markov5 начи­нается с того, что будет напечатано Show your, после чего случайным образом будет выбрано или flowcharts, или tables. Если будет выбрано первое слово, то текущим префиксом станет your flowcharts, а следую­щим словом будет выбрано and или will. Если же выбранным окажется tables, то после него последует слово and. Так будет продолжаться до тех пор, пока не будет сгенерирована фраза заданного размера или в ка­честве суффикса не будет выбрано слово-метка конца ввода (end).

Наша программа прочтет отрывок английского текста и использует ал­горитм markov для генерации нового текста, основываясь на частотах вхождения фраз фиксированной длины. Количество слов в префиксе, ко­торое в разобранном примере равно двум, в нашей программе будет пара­метром. Если префикс укоротить, текст будет менее логичным, если длину префикса увеличить, наше творение будет походить на дословный пере­сказ вводимого текста. Для английского текста использование двух слов для выбора третьего дает разумный компромисс: сохраняется стиль про­тотипа и привносится достаточно своеобразия.

Что такое слово? Очевидный ответ — последовательность символов алфавита, однако нам было бы желательно сохранить и пунктуацион­ные различия, то есть различать "words" и "words.". Приписывание знаков препинания к словам повышает качество генерируемого тек­ста, вводя в него пунктуацию, а следовательно (косвенным образом), и грамматику, влияет на выбор слов; правда, при этом в текст могут просочиться несбалансированные разрозненные скобки и кавычки. Таким образом, мы определим "слово" как нечто, ограниченное с двух сторон пробелами, — при этом получится, что нет ограничений на ис­пользуемый язык, а знаки пунктуации привязаны к словам. Поскольку в большинстве языков программирования имеются средства, позволя­ющие разбить текст на слова, разделенные пробелами, воплотить заду­манное будет несложно.

Исходя из выбранного метода можно сказать, что все слова, фразы из двух слов и фразы из трех слов должны присутствовать во вводимом тек­сте, но появятся новые фразы из четырех и более слов. Ниже приведены несколько предложений, сгенерированных программой, разработке кото­рой посвящена данная глава, полученных на основе текста седьмой гла­вы книги "И восходит солнце" Эрнеста Хемингуэя:

As I started up the undershirt onto his chest black, and big stomach muscles bulging under the light. "You see them?" Below the line where his ribs stopped were two raised white welts. "See on the forehead." "Oh, Brett, I love you." "Let's not talk. Talking's all bilge. I'm going away tomorrow." "Tomorrow?" "Yes. Didn't I say so? I am." "Let's have a drink, then."

Здесь нам повезло — пунктуация оказалось корректной, но этого могло и не случиться.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]