"НИКНЕЙМЫ" оптом и в розницу

"НИКНЕЙМЫ" оптом и в розницу Не так давно на страницах "Компьютерной газеты" была опубликована статья о том, как выбрать "никнейм", то есть псевдоним для аутентификации пользователя при работе и отдыхе в Internet. Ее автор с юмором предложил несколько способов, основанных как на выстраивании длинных логических цепочек типа "умный... -> ... -> ... -> хорошист", так и на случайном комбинировании букв, например, методом набора на клавиатуре с закрытыми глазами.

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

Ограничим наше рассмотрение только сочетаниями букв английского алфавита, во-первых, потому что многие ресурсы Internet не хотят воспринимать кириллицу, во-вторых, потому что этих букв всего 26, а не 32 (33).

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

Некоторым улучшением является случайный выбор букв из алфавита с учетом частоты их встречаемости в реальных текстах, но он не учитывает зависимости вероятности появления буквы от ее позиции в слове.

Практика показала, что оба описанных выше метода не дают желаемого результата, то есть вероятность сгенерировать благозвучное буквосочетание, достойное гордого звания "никнейм", крайне мала. Поэтому перейдем к рассмотрению способа, пригодного к массовому тиражированию качественных "никнеймов".

Предположим, что последовательность букв в английском слове представляет собой участок простой цепи Маркова, то есть такого случайного процесса, принимающего конечное число различных дискретных значений (в нашем случае - 26 букв английского алфавита), который обладает следующим характеристическим свойством. Вероятность очередного значения процесса (то есть номера буквы в алфавите) зависит только от его текущего значения и не зависит от предыдущих значений (Горяинов В. Т. Статистическая радиотехника. - М.: Сов. Радио, 1980. - 544 с.).

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

Для того чтобы построить матрицу эмпирических одношаговых вероятностей перехода (то есть таблицу T 26 x 26, в которой номер строки соответствует номеру текущей буквы Lj в алфавите, номер столбца - номеру следующей буквы Lk, а на пересечении находится значение условной вероятности P(Lj|Lk) появления следующей буквы после текущей), надо проанализировать реальный текст. В процессе анализа определяется частота встречаемости буквы Lk после буквы Lj и записывается в соответствующую ячейку T[Lj, Lk].

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

Здесь надо отметить, что качество генерируемых слов зависит от содержания анализируемого текста. Я, например, исследовал то, что было под рукой - описание прерываний MS DOS. Естественно, романтичности получающимся "никнеймам" это не прибавило, хотя их качество оказалось вполне приемлемым.

На этом первый этап работы - этап анализа - завершен. Наступило время на основании полученной информации заняться синтезом буквосочетаний.

Очевидно, что первые буквы слов английского языка подчиняются отнюдь не равномерному закону распределения, который нетрудно определить путем анализа текстов, но для придания экзотики генерируемым буквосочетаниям я воспользовался функцией Randomize, которая под различными именами присутствует практически во всех языках программирования. Итак, первая буква "никнейма" L0 получена путем случайного выбора из алфавита.

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

1. Выбирается строка таблицы T, соответствующая текущей букве (пока что L0).

2. Единичный отрезок [0; 1] делится пропорционально вероятностям, содержащимся в выбранной строке таблицы (при этом единичный отрезок разобьется на 26 частей по числу букв алфавита).

3. С помощью функции Randomize генерируется случайное число и определяется, в какой из 26 интервалов оно попадает.

4. По номеру интервала определяется следующая буква.

5. Полученная буква становится текущей.

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

Среди "никнеймов", сгенерированных описанным выше способом, часто встречаются даже реальные слова английского языка (а возможно, и других языков тоже, просто этот факт остается незамеченным). Большинство буквосочетаний вполне произносимы и достойны представлять пользователя на бескрайних просторах Internet.

Если у Вас нет времени или Вы просто не хотите пройти весь описанный выше путь, чтобы выбрать себе псевдоним, то можете посетить страничку http://amuleti.narod.ru и самостоятельно оценить качество приведенного способа, а заодно и подобрать себе подходящее имя.

Не спешите! "Никнеймов" хватит всем! Amulet (c) компьютерная газета


Компьютерная газета. Статья была опубликована в номере 48 за 2000 год в рубрике интернет :: безопасность

©1997-2024 Компьютерная газета