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;
---------------------------------------------------------
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.
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;
---------------------------------------------------------
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.
0 comments:
Post a Comment