如何生成随机无意义,但同时容易记住单词?

时间:2011-02-24 17:30:25

标签: java php string algorithm

我需要找出一个算法,或者更好的是,如果在php / java中有一个实现来生成单词,建议用户选择像某些标识符,但我希望它们有点容易记住,例如'wonifuxa','thonqi','oqriman'等等,但不是'nxdFgtqI'

7 个答案:

答案 0 :(得分:7)

这是一个生成你正在描述的随机单词的函数。它没有使用字母“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

答案 1 :(得分:5)

有一个用于生成可发音词的库。以下是图书馆的链接:http://www.multicians.org/thvv/gpw.html。该页面上有一个指向Java源文件的链接。我首先找到了python库:http://www.preetk.com/node/pygpw-generate-pronouncable-words/

答案 2 :(得分:4)

回到电报的时代,当每封信收费时,很多公司设计了代码,用尽可能少的字母对整个句子进行编码。他们中的大多数都有相同的基本要求:一组相当容易记住的字母。通常的规则是像元音组和最多两个辅音之间的交替。这将允许(例如)“labdon”,但不允许“aobldn”(相同的字母,不同的顺序)。几乎你按照这样的规则生成的任何序列都很容易发音,所以有人可以记住它本质上是一个单词,而不是必须记住所有单个字母。

答案 3 :(得分:1)

使用字典并选择两个单词。将它们拆分为随机点并加入它们。

示例:

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

为了获得更好的结果,控制分裂点(例如,第一个单词:在元音处分开,第二个单词:在辅音之前分开,以及产生音节= 3的方式)。

答案 4 :(得分:1)

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;
    }

答案 5 :(得分:0)

您是否可以一次创建一个字符串,并使每个字符的值在97-122(含)之间。这些是字母a-z(非上限)的ascii十进制值。然后当然将它们转换为字符串。

虽然这是否有效取决于您对“易记”的定义。他们都很难记住我。

答案 6 :(得分:0)

废话词生成器。这是使用几个与@Jerry Coffin所说的相似的不同结构构建的。有趣,但不一定有用! http://www.mygengen.com/gengens/view/nonsense-words