2011-02-24 13 views
6

Necesito encontrar un algoritmo o, mejor aún, si hay una implementación en php/java para generar palabras que se sugerirán al usuario para elegir como algunos identificadores, pero quiero que sean algo fáciles de recordar, por ejemplo ' wonifuxa ',' thonqi ',' oqriman ', etc., pero no algo como' nxdFgtqI '¿Cómo generar palabras al azar sin sentido, pero al mismo tiempo fáciles de recordar?

+2

hacerlo por sílabas se peguen entre sí. Construya las sílabas pegando fonemas (o solo letras) en combinaciones pronunciables de consonantes y vocales. Lucro. –

+1

¿No es esto un poco subjetivo? Fácil de recordar para quien? Supongo que el problema se resolverá solo cuando trates de definir lo que es fácil de recordar significa para ti ... –

+1

Pon el software de reconocimiento de voz a un niño pequeño y toca la grabación. – corsiKa

Respuesta

6

Aquí hay una función que genera palabras aleatorias como las que está describiendo. No usa la letra "Q" porque esa siguió haciendo palabras impronunciables.

<?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); 

?> 

Un ejemplo del resultado es: muher sucok kozive xaso

+0

¡Gracias! Esto es exactamente lo que necesito! Funciona perfectamente :) –

0

Podría crear una cadena de caracteres de uno en uno y tener cada carácter un valor aleatorio entre 97-122 (inclusive). Estos son los valores decimales ascii para las letras a-z (sin mayúsculas). Y luego, por supuesto, convertirlos a cadena.

Aunque, si esto funcionaría o no se basa en su definición de "Fácil de recordar". Todos se ven muy difíciles de recordar para mí.

3

En la época de los telégrafos, cuando se cobraba la comunicación por carta, bastantes compañías idearon códigos para codificar oraciones completas en el menor número de letras posible. La mayoría de ellos tenían el mismo requisito básico: una colección de cartas que era razonablemente fácil de recordar. La regla habitual era algo así como la alternancia entre grupos de una vocal y hasta dos consonantes. Esto permitiría (por ejemplo) "labdon", pero no "aobldn" (mismas letras, diferente orden). Casi cualquier secuencia que produzcas siguiendo una regla como esta resulta razonablemente fácil de pronunciar, así que alguien puede recordarla como una palabra en esencia en lugar de tener que recordar todas las letras individuales.

1

Usa un diccionario y elige dos palabras. Dividirlos en un punto al azar y unirlos.

Ejemplo:

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

para aún mejores resultados, controlar el punto de división (por ejemplo, primera palabra: Split en una vocal, segunda palabra: split antes de una consonante y de una manera que las sílabas resultantes = 3).

0

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