Как генерировать случайные бессмысленные, но в то же время легко запоминающиеся слова? - PullRequest
7 голосов
/ 24 февраля 2011

Мне нужно выяснить алгоритм или, что еще лучше, если в php / java есть реализация для генерации слов, которые будут предлагаться пользователю, например, некоторые идентификаторы, но я хочу, чтобы их было легко запомнить, например:'wonifuxa', 'thonqi', 'oqriman' и так далее, но не что-то вроде 'nxdFgtqI'

Ответы [ 7 ]

7 голосов
/ 24 февраля 2011

Вот функция, которая генерирует случайные слова, которые вы описываете.Он не использует букву «Q», потому что он продолжает произносить непроизносимые слова.

<?php
    //generate random consonants separated by vowels
    function generate_faux_word($letters = 5){

        //define arrays of consonants and vowels
        //no q, it's tough to remember
        $consonants = array('b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z');
        $vowels = array('a', 'e', 'i', 'o', 'u');

        $ret_word = "";
        $consonant_toggle = true;
        //randomly choose a consonant then a vowel until the word is as long as the parameter
        while(strlen($ret_word) < $letters){
            if ($consonant_toggle){
                $ret_word .= $consonants[array_rand($consonants)];
                $consonant_toggle = false;
            }else{
                $ret_word .= $vowels[array_rand($vowels)];
                $consonant_toggle = true;
            }

        }

        return $ret_word;
    }

    echo generate_faux_word();
    echo "<br />";
    echo generate_faux_word();
    echo "<br />";
    echo generate_faux_word(6);
    echo "<br />";
    echo generate_faux_word(4);

?>

Пример вывода: muher sucok kozive xaso

5 голосов
/ 24 февраля 2011

Есть библиотека для генерации произносимых слов. Вот ссылка на библиотеку: http://www.multicians.org/thvv/gpw.html. На этой странице есть ссылка на исходный файл Java. Сначала я нашел для него библиотеку Python: http://www.preetk.com/node/pygpw-generate-pronouncable-words/

4 голосов
/ 24 февраля 2011

Еще во времена телеграфа, когда за общение взималось плата за письмо, довольно много компаний разработали коды для кодирования целых предложений как можно меньшим количеством букв. У большинства из них было одно и то же основное требование: набор писем, который было достаточно легко запомнить. Обычным правилом было что-то вроде чередования между гласными группами и до двух согласных. Это позволило бы (например) «labdon», но не «aobldn» (те же буквы, другой порядок). Практически любая последовательность, которую вы производите, следуя такому правилу, в конце концов становится легко произносимой, поэтому кто-то может запомнить ее как слово, а не запоминать все отдельные буквы.

1 голос
/ 07 июня 2017

C #

    private static string RandomWord(int length)
    {
        var consonants = new[] { "b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "r", "s", "t", "v", "w", "x", "y", "z" };
        var vowels = new[] { "a", "e", "i", "o", "u" };
        var word = "";
        var b = true;
        for (var i = 0; i < length; i++)
        {
            word += b ? consonants[Rng.Next(consonants.Length)] : vowels[Rng.Next(vowels.Length)];
            b = !b;
        }
        return word;
    }
1 голос
/ 24 февраля 2011

Используйте словарь и выберите два слова.Разделите их в произвольной точке и присоедините к ним.

Пример:

IDEA -> IDE
WITHOUT -> THOUT
-----------
IDETHOUT

для еще лучших результатов, управляйте точкой разделения (например, первое слово: разделение на гласный, второе слово: разделениеперед согласным и таким образом, что в результате слогов = 3).

0 голосов
/ 24 февраля 2011

Генератор бессмысленных слов. Это было построено с использованием нескольких различных структур, похожих на то, о чем говорил @Jerry Coffin. Весело, но не обязательно полезно! http://www.mygengen.com/gengens/view/nonsense-words

0 голосов
/ 24 февраля 2011

Не могли бы вы создать строку по одному символу за раз и иметь для каждого символа случайное значение между 97-122 (включительно). Это десятичные значения ascii для букв a-z (без заглавных букв). И затем, конечно, преобразовать их в строку.

Хотя то, сработает ли это, зависит от вашего определения «Легко запомнить». Все они выглядят довольно трудно запомнить для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...