EasyBotter.phpを以下のように改造して様子見中。あまり正規表現に詳しくないので悲惨なことになっております。
template.csvはあらかじめ作成していたものを、word.csvは、キーフレーズ抽出時にこっそり保存していたものを流用しています。
class EasyBotter {
// キーフレーズ置換で発言を作る
private function makeSwapKeyPhraseTweet() {
$keyphrase = array();
$poem = array();
$table = "。";
$status = "";
// キーフレーズCSVを読み込み
$fp = fopen('word.csv', 'r') or die('ファイルが開けません');
while(($columns = fgetcsv($fp, 4096, ",", '"')) !== FALSE) {
array_push($keyphrase, $columns[0]);
}
fclose($fp);
shuffle($keyphrase);
// 原文CSVを読み込み
$fp = fopen('template.csv', 'r') or die('原文ファイルが開けません');
while(($columns = fgetcsv($fp, 4096, ",", '"')) !== FALSE) {
array_push($poem, array($columns[0], $columns[1]));
}
fclose($fp);
// 名詞を適当に入れ替える
$keyphrase_num = count($keyphrase);
$rd_keys = array_rand(array_filter($poem, 'is_noun'), $keyphrase_num);
for($i=0; $i<$keyphrase_num; $i++) {
$poem[$rd_keys[$i]][0] = $keyphrase[$i];
}
// テーブル作成
for($i=0; $i<count($poem); $i++) {
$table .= $poem[$i][0];
}
// 一致している間は選びなおす
$status_1 = "";
$status_2 = "";
while($status_1 === $status_2) {
// キーフレーズを選出×2
$rd_keys = array_rand($keyphrase, 2);
$matches_1 = array();
$matches_2 = array();
$pattern_1 = '/^(.*)[。?](.*?)'.$keyphrase[$rd_keys[0]].'(.*?[。?])/u';
$pattern_2 = '/^(.*)[。?](.*?)'.$keyphrase[$rd_keys[1]].'(.*?[。?])/u';
preg_match_all($pattern_1, $table, $matches_1);
preg_match_all($pattern_2, $table, $matches_2);
$status_1 = $matches_1[2][0].$keyphrase[$rd_keys[0]].$matches_1[3][0];
$status_2 = $matches_2[2][0].$keyphrase[$rd_keys[1]].$matches_2[3][0];
}
$status = "「".$status_1.$status_2."」";
return $status;
}
// 途中省略
private function makeReplyTweets($replies, $replyFile, $replyPatternFile){
if(empty($this->_replyPatternData[$replyPatternFile]) && !empty($replyPatternFile)){
$this->_replyPatternData[$replyPatternFile] = $this->readPatternFile($replyPatternFile);
}
$replyTweets = array();
foreach($replies as $reply){
$status = "";
// 追加ここから
if(strpos((string)$reply->text, "作文して") !== FALSE) {
// キーフレーズで作文
$status = $this->makeSwapKeyPhraseTweet();
}
// 追加ここまで
// 以下省略
}
}
}
各データファイルの構造
word.csv
1行1カラムの単純なデータです。相手のキーフレーズ+定型文で作文 でこっそり保存していたものです。
"スカイツリー" "お台場" "実績取り" "競合他社" "以下略" "デスマッチ" "中心" "沿岸部"
template.csv
元となる作文をあらかじめ形態素解析しておいたものです。この中から名詞をランダムに取り出して、word.csvの中身と入れ替えています。
"太陽系","名詞" "に","助詞" "生物","名詞" "が","助詞" "生息","名詞" "する","助動詞" "こと","名詞" "を","助詞" "奇跡的","形容動詞" "に","助詞" "可能","名詞" "に","助詞" "し","動詞" "た","助動詞" "惑星","名詞" "、","特殊" "それ","名詞" "が","助詞" "地球","名詞" "で","助動詞" "ある","助動詞" "。","特殊"