View Full Version : Generare casualmente stringhe e frasi di senso compiuto
Ciao ragazzi, avrei la necessità di scrivere (in java) un generatore casuale di stringhe e frasi.
La parte più difficile è quella di costruire anche alcune frasi di senso compiuto.
Faccio un esempio banale.
Supponiamo voglia creare e memorizzare in un DB un nuovo libro, con i campi:
-Autore: Pinco Pallino
-Titolo: Rocco e i suoi fratelli
-Casa editrice: Pornadori
-Data: 30/10/2007
-....
I valori numerici è abbastanza semplice crearli random, ma per le stringhe e frasi?
Esistono dei dizionari da cui si possa recuperare delle informazioni?
Che soluzione consigliate?
grazie
Dai, ho voluto fare un esempio simpatico :D
Cerco qualche consiglio serio :)
AnonimoVeneziano
25-10-2007, 23:15
Il problema nel tuo caso è che quelle frasi sono tutte tranne che casuali :D
Cioè tutte quelle stringhe appartengono ad un contesto (nel tuo esempio un record di un libro) e ad ogni riga (autore, libro, casa editrice) sono state scritte stringhe contestualizzate.
L'autore che hai scritto è in effetti un nome valido (parodico, certo) di persona, stessa cosa per il nome del libro e casa editrice. Sarebbe stato più strano e "casuale" se avessi messo come Autore "Pornadori" e casa editrice "Rocco i suoi fratelli".
Insomma, spero di aver reso chiaro il concetto che quel pezzo di testo non è casuale :p
Almeno come minimo devi specificare un contesto per fare una cosa del genere.
Ciao
EDIT: Se il tuo scopo è creare solo un "generatore di libri fasulli" allora potresti creare dei file database dove tenere i nomi di autori fasulli e i titoli inventati. A quel punto fai in modo che, all'atto della generazione del libro , il tuo programma peschi a caso tra , rispettivamente, gli autori , i titoli, le case editrici, le date ... etc memorizzate nel file di database (che può essere scritto in XML o come vuoi tu).
Un algoritmo naive per un generatore casuale di frasi lo trovi nel libro "the practice of programming" di pike.
In pratica è il seguente (esempio con profondità 2).
Prendi un paio di frasi (puoi benissimo usare dei capoversi di libri o roba del genere)
e spezzetti le frasi a gruppi di 2 parole (2 è la profondita).
tipo
Il gatto dorme in santa pace sul letto.
Il papa parla dalla santa sede
diventa
<inizio> il
il gatto
gatto dorme
dorme in
in santa
santa pace
pace sul
sul letto
letto <fine>.
<inizio> il
il papa
papa parla
parla dalla
dalla santa
santa sede
sede <fine>.
poi prendi i pezzi e li valuti con un generatore random dove il primo pezzo fa match per scegliere il secondo.
esempio:
devi scegliere un inizio (qui ne hai 2 identici (esempio un po' sfigato)
il
poi cerchi tutti quelli che fanno match
il papa, il gatto e scegli random
il gatto
poi iteri e puoi arrivare ad una cosa del tipo
il gatto dorme in stanta sede.
ovviamente piu consideri la profondità alta 3, 4 parole e piu consideri le parole appartententi alla parte inizalie per fare match meno saranno le frasi disponibili ma sempre piu sensate.
Sono stato spiegato?
feyd
grazie feyd, la tua idea può essere la base per un buon algoritmo!
ci rifletterò :)
Ziosilvio
29-10-2007, 08:36
Potresti anche dare un'occhiata a come funziona il Polygen (http://www.polygen.org/web/index.html), e (se te la senti) esaminare il suo codice sorgente.
Ti consiglio, in particolare, le grammatiche "Nomi di dischi metal", "Armi di Goldrake", e "Ordinanze comunali di blocco del traffico" :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.