Random sentence
This example shows how to create random (un-)meaningful sentences :-)
Here are some example output sentences:
These dogs are yellow.
These cars are deadly huge!!
This is a deadly cool sentence!
This is a fluffy sentence!
These monkeys are deadly boring!
These examples are very stupid *lol*
This is another monkey dog!?
BTW: This also works nicely with german sentences :-)
// // A list of sentences: // // %something ==> is a variable // $r_sentences = ' This is a %adjective %noun %sentence_ending This is another %noun %noun %sentence_ending I %love_or_hate %nouns , because it is %adjective %sentence_ending My %family says you are not %adjective %sentence_ending These %nouns are %adjective %sentence_ending '; // // This is another list of variables: // (This list can also contain variables (like %something)) // // Formatting: // (first-line) = Variablename // (second-line) = Variables (seperated by semicolon) // $r_variables = ' adjective %adjective_list;very %adjective_list;deadly %adjective_list adjective_list big;huge;small;red;blue;cool;yellow;pink;fluffy;stupid;clever;fat;lazy;boring noun %noun_list;%adjective %noun_list noun_list sentence;beer;cow;monkey;donkey;example;ice cream;dog nouns beers;monkeys;donkeys;examples;cars;trees;birds;dogs love_or_hate love;hate;like family %adjective %family_members;%family_members family_members grandpa;brother;sister;mom;dad;grandma sentence_ending .;!;!!;!?;*lol* '; // strip spaces: $r_sentences = trim($r_sentences); $r_variables = trim($r_variables); // fix new lines and split sentences up: $r_sentences = str_replace("\r\n", "\n", $r_sentences); $r_sentences = str_replace("\r", "\n", $r_sentences); $r_sentences = explode("\n", $r_sentences); $r_variables = str_replace("\r\n", "\n", $r_variables); $r_variables = str_replace("\r", "\n", $r_variables); $r_variables = explode("\n\n", $r_variables); // this array contains all variables: $r_vars = array(); // go trough all variables: for($x=0; $x < count($r_variables); $x++){ $var = explode("\n", trim($r_variables[$x])); // lowecase all: $key = strtolower(trim($var[0])); // split words: $words = explode(";", trim($var[1])); // add variables to the $r_vars Array $r_vars[$key] = $words; } // returns a word from the variables array: function get_word($key){ global $r_vars; if (isset($r_vars[$key])){ $words = $r_vars[$key]; // calc max. $w_max = count($words)-1; $w_rand = rand(0, $w_max); // return the word, and check if the word contains // another variable: return replace_words(trim($words[$w_rand])); } else { // the word was not found :-( return "(Error: Word '$key' was not found!)"; } } // this function replaces a variable like %something with // the proper variable-value: function replace_words($sentence){ // if there are no variables in the sentence, // return it without doing anything if (str_replace('%', '', $sentence) == $sentence) return $sentence; // split the words up: $words = explode(" ", $sentence); $new_sentence = array(); // go trough all words: for($w=0; $w < count($words); $w++){ $word = trim($words[$w]); if ($word != ''){ // is this word a variable? if (preg_match('/^%(.*)$/', $word, $m)){ // --> yes $varkey = trim($m[1]); // get the proper word from the variable list: $new_sentence[] = get_word($varkey); } else { // --> no it is a default word $new_sentence[] = $word; } } } // join the array to a new sentence: return implode(" ", $new_sentence); } // calc. max. $max_s = count($r_sentences)-1; $rand_s = rand(0, $max_s); // get a random sentence: $sentence = $r_sentences[$rand_s]; // format the resulting sentence, so that I looks nice: // (delete whitespace infront of punctuation marks) $sentence = str_replace(' ,', ',', ucfirst(replace_words($sentence))); $sentence = str_replace(' .', '.', $sentence); $sentence = str_replace(' !', '!', $sentence); $sentence = str_replace(' ?', '?', $sentence); $sentence = trim($sentence); // finally print the new sentence! :-D print $sentence;
Snippet Details
-
AuthorJonas John
-
LicensePublic Domain
-
LanguagePHP
-
Created11/23/2006
-
Updated11/23/2006
-
Tagstutorials, random, fun
Sorry folks, comments have been deactivated for now due to the large amount of spam.
Please try to post your questions or problems on a related programming board, a suitable mailing list, a programming chat-room,
or use a QA website like stackoverflow because I'm usually too busy to answer any mails related
to my code snippets. Therefore please just mail me if you found a serious bug... Thank you!
Older comments:
GrosBedo November 12, 2010 at 16:57
Thank you for this piece of code, exactly what I needed ! I am using it to generate random but valid game logs for debugging purposes.
There is a small glitch in the code that makes it unusable in some cases (like mine !), just change this :
$r_variables = str_replace("rn", "n", $r_variables);
$r_variables = str_replace("r", "n", $r_variables);
$r_variables = explode("nn", $r_variables);
Into this :
$r_variables = str_replace("rn", "n", $r_variables);
$r_variables = str_replace("r", "n", $r_variables);
$r_variables = preg_replace("/ns*n/", "nn", $r_variables);
$r_variables = explode("nn", $r_variables);
Just add the preg_replace, this will ensure that the variables newlines are cleanly formatted.
There is a small glitch in the code that makes it unusable in some cases (like mine !), just change this :
$r_variables = str_replace("rn", "n", $r_variables);
$r_variables = str_replace("r", "n", $r_variables);
$r_variables = explode("nn", $r_variables);
Into this :
$r_variables = str_replace("rn", "n", $r_variables);
$r_variables = str_replace("r", "n", $r_variables);
$r_variables = preg_replace("/ns*n/", "nn", $r_variables);
$r_variables = explode("nn", $r_variables);
Just add the preg_replace, this will ensure that the variables newlines are cleanly formatted.