形態素解析をしてそれを辞書に登録し、辞書を元に作文を行います。
3) array_shift($tmp);
set_word($dic, $tmp);
if ($w == "。 "){
$tmp = ["@"]; continue;
}
}
return $dic;
}
// 辞書に単語を登録
function set_word(&$dic, $tmp){
$w1 = $tmp[0];
$w2 = $tmp[1];
$w3 = $tmp[2];
if (empty($dic[$w1])) $dic[$w1] = [];
if (empty($dic[$w1][$w2])) $dic[$w1][$w2] = [];
if (empty($dic[$w1][$w2][$w3])) $dic[$w1][$w2][$w3] = 0;
$dic[$w1][$w2][$w3]++;
}
// 辞書から作文する
function make_sentence($dic, $count){
$ret = [];
for ($i = 0; $i < $count; $i++){
$top = $dic["@"];
if (!$top) break;
$w1 = choice_word($top);
$w2 = choice_word($top[$w1]);
$ret[] = $w1;
$ret[] = $w2;
for (;;) {
$w3 = choice_word($dic[$w1][$w2]);
$ret[] = $w3;
if ($w3 == "。")break;
$w1 = $w2;
$w2 = $w3;
}
}
return implode("", $ret);
}
function choice_word($o){
if (!is_array($o)) return "。 ";
$ks = array_keys($o);
return $ks[mt_rand(0, count($ks)-1)];
}