PDA

View Full Version : Generare casualmente stringhe e frasi di senso compiuto


gokan
25-10-2007, 21:20
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

gokan
25-10-2007, 21:54
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).

feyd
26-10-2007, 11:22
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

gokan
28-10-2007, 16:48
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