2009-08-20 22 views
12

Generare una stringa veramente casuale di una determinata lunghezza è un'attività abbastanza semplice (e già ben coperta).Come posso generare stringhe "leggibili" pseudo-casuali in Java?

Tuttavia; Mi piacerebbe generare una stringa casuale "pseudo" con il vincolo aggiuntivo che sia relativamente facilmente leggibile (ad un lettore inglese-nativo)

Penso che un altro modo per dire questo è che la stringa generata dovrebbe consistono in "sillabe riconoscibili". Ad esempio, "akdjfwv" è una stringa casuale, ma non è affatto riconoscibile. "Flamyom"; tuttavia, è molto "riconoscibile" (anche se non ha senso).

Ovviamente, si potrebbe fare una lunga lista di "sillabe riconoscibili" e quindi selezionarle casualmente.

Ma, c'è un modo migliore per fare qualcosa come generare una "sillaba riconoscibile" o generare una "sillaba" e quindi testarlo per vedere se è "riconoscibile"?

Posso pensare a diversi modi per realizzare questa implementazione, ma se qualcuno l'ha già implementato (preferibilmente in Java o C#) preferirei riutilizzare il loro lavoro.

Qualche idea?

risposta

6

penso che questo dovrebbe fare quello che vuoi:

Java Password Generator

ha il codice sorgente e una licenza permissiva in modo da poter adattare il codice sorgente a quello che stai cercando.

+0

Questo genera grandi stringhe. Arriva a un costo di prestazioni piuttosto elevato (al contrario di generare lunghi sequenziali). – Jared

17

Si potrebbe provare a implementare un Markov chain e dargli un passaggio adatto da elaborare. C'è un Java implementation che potrebbe funzionare per te.

Questo è un esempio da interpolazione tra Genesis in inglese e Genesi in spagnolo (N = 1):

In bersaran thelely e avin Inder THT teathe m Lovig weay waw ThOD MOFIN lui t thte h fupiteg sot llissed od ma. lllar t land fingujod maid af de bacchetta tetodamoiz fosu Andesp. ersunen thenas lowhejod whipanirede tifinas Gofuavithila d gió Y Diche fua Dios co, liens ly Y crerdíquen ticuesereregos hielase agúnd veumarbas iarasens laragún co eruerá laciéluelamagúneren Dien a He.

+0

Vorrei +5 per la menzione di Catene di Markov, ma posso solo +1 ...;) –

+0

@Alex, grazie. puoi votare per un'altra mia risposta che ti piace (se ce ne sono) se ti senti così generoso –

+2

Ciò significherebbe vanificare l'intento del sistema di punti –

5

È necessario generare sillabe casuali. Il modo più semplice per farlo è usare sillabe che sono consonanti-vocaliche, o consonanti-vocali-consonanti. Da un elenco di consonanti e vocali, scegli a caso per costruire sillabe, quindi unisci le sillabe insieme per creare una stringa.

Tenere presente che l'elenco di consonanti non deve essere costituito da lettere consonanti, ma da fonemi, quindi "th", "st", "sl", ecc. Potrebbero essere voci nell'elenco delle consonanti.

1

Si consiglia di verificare SCIgen. Genera interi articoli scientifici privi di senso: http://pdos.csail.mit.edu/scigen/

E la fonte è disponibile: è rilasciata sotto GPL, ed è attualmente disponibile tramite CVS anonimo.

1

Non sono sicuro di cosa sia esattamente ciò di cui hai bisogno, ma se i grafici della gente del settore della stampa hanno utilizzato i generatori Lorem Ipsum per creare un testo abbastanza simile al testo che il tuo cervello lo elabora come tale senza essere effettivamente leggibile parole. Maggiori informazioni here

Non so se esiste un servizio Web a cui è possibile iscriversi, ma ci sono diversi siti che generano solo stringhe Lorem Ipsum per te, quindi potresti essere in grado di utilizzarli.

1

C'è una buona sezione su questo in Programming Pearls. È online ma ti consiglio vivamente di comprare il libro; Uno dei migliori libri di programmazione in giro secondo me.

0

Tutto torna al motivo per cui lo si desidera. Se si desidera solo "pronunciabile incomprensibile", penserei che la cosa più semplice da fare sarebbe quella di generare consonanti e vocali alternate. Quello sarebbe un minuscolo sottoinsieme di tutto ciò che è pronunciato senza senso, ma qual è l'obiettivo? Per dare un intervallo più ampio potresti creare una tabella di fonemi di consonanti e di fonemi vocalici, con la lista delle consonanti che include non solo singole lettere come "b" e "d" ma anche "th", "br", e così via, e l'elenco delle vocali potrebbe includere "oo" e "ea", ecc. Un altro passo sarebbe quello di generare sillabe invece di lettere, con una sillaba contenente sia vocale, consonante-vocale, o consonante-vocale-consonante. Cioè, passa attraverso la creazione di sillabe, quindi all'interno delle sillabe scegli uno dei tre modelli. Probabilmente vuoi proibire due sillabe solo vocali di fila. (Sto cercando di pensare ad un esempio di quello in inglese. Probabilmente succede, ma gli unici esempi che posso pensare sono presi in prestito da altre lingue, come "stoa".)

Problemi correlati