名詞拾いについて(まとめ)
ちょっと前の記事がゴチャゴチャになっちゃったのでとりあえず現状まとめしときます。
プログラミングができなくても作れるTwitter botの作り方さんで配布されている「誰かに@を貰うと用意した文章をランダムに返すbot」に、リプライから名詞を拾って発言に利用する場合の改造方法です。
基本的にphaさんのプログラム部分には手を加えないようにしていますので、もし動かなかったら該当部分を削除してください。
【事前準備】
文章の解析にYahoo!デベロッパーネットワークの日本語形態素解析を利用しています。単語拾いを使うためには事前にアプリケーションIDの登録(無料)が必須となりますので、各自登録してください。
【プログラムの追加】
・reply_random.php の234行目の後(//ここで投稿するメッセージが完成の直前)に以下を追加してください。
//------------------------------------------- ■■ここから名詞拾い■■
//アプリケーションID
$apiKey = "**********************";
$url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=" . $apiKey . "&filter=9&sentence=" . $tweet;
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);
//配列「meishi」を作る
$meishi=array();
// 特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加
foreach($xml->ma_result->word_list->word as $item)
{
if ((ereg("ダタラ|モスマン|モコイ", $item->surface)==False) && (mb_strlen($item->surface) > 3*2))
{$meishi[]=$item->surface;}
}
//リプライの中に名詞がない場合の単語をセット(複数設定可)
if ($meishi[0] == "")
{$meishi = array("<censored>", "×××", "■■■");}
//名詞をランダムに選ぶ
$ran_meishi = $meishi[array_rand($meishi)];
//名詞を変換する
$message = ereg_replace("{ran_meishi}", "$ran_meishi", $message);
//------------------------------------------- ■■ここまで名詞拾い■■
【設定方法】
①アプリケーションIDにYahoo!デベロッパーネットワークのIDを入力します
②特定の単語を拾いたくない場合、「ダタラ|モスマン|モコイ」の部分を設定します。キャラの名前等、話しかけられる頻度の高い単語を設定してください。
③指定字数以下の名詞を拾わない場合「3*2」の部分を設定します。「3*2」の場合2文字以下の名詞は拾わなくなります。3文字以下の名詞を拾わせないようにするには「3*3」にします。これを設定しないと数字一文字でも名詞と判断してしまうのでちょっと厄介です。
④リプライの中に名詞がなかった場合、置き換える単語を設定します。「"<censored>", "×××", "■■■"」の赤字の部分に入れ込んでください。
⑤「tw.txt」の中に、拾った名詞を置き換えるメッセージを追記します。{ran_meishi}を拾った名詞に置き換えますので、適当に入れ込んでみてください。
例)上記の設定で、tw.txtに 「君は{ran_meishi}が好きなんだね」 と記述した場合
・botへのリプライ内容
「冷凍庫に氷とアイスを入れておいたら溶けました。責任取ってください。おっぱい。」
↓
・botからのリプライ内容
「君は冷凍庫が好きなんだね」
「君はアイスが好きなんだね」
「君はおっぱいが好きなんだね」
この3種類からランダムに選ばれます。
・botへのリプライ内容
「モスマンとモコイさんとヌエが好きです。ください。」
↓
・botからのリプライ内容
「君は<censored>が好きなんだね」
「君は×××が好きなんだね」
「君は■■■が好きなんだね」
この3種類からランダムに選ばれます。
以上です。
【参考にさせていただいたサイトさん】
・YAHOO!日本語形態素解析Web APIをPHPから使うサンプルコード
あと、PHPの記述でアドバイスいただいたmatさん、ありがとうございました!
プログラミングができなくても作れるTwitter botの作り方さんで配布されている「誰かに@を貰うと用意した文章をランダムに返すbot」に、リプライから名詞を拾って発言に利用する場合の改造方法です。
基本的にphaさんのプログラム部分には手を加えないようにしていますので、もし動かなかったら該当部分を削除してください。
【事前準備】
文章の解析にYahoo!デベロッパーネットワークの日本語形態素解析を利用しています。単語拾いを使うためには事前にアプリケーションIDの登録(無料)が必須となりますので、各自登録してください。
【プログラムの追加】
・reply_random.php の234行目の後(//ここで投稿するメッセージが完成の直前)に以下を追加してください。
//------------------------------------------- ■■ここから名詞拾い■■
//アプリケーションID
$apiKey = "**********************";
$url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=" . $apiKey . "&filter=9&sentence=" . $tweet;
$rss = file_get_contents($url);
$xml = simplexml_load_string($rss);
//配列「meishi」を作る
$meishi=array();
// 特定の単語、指定字数以下の名詞を弾きながら配列に名詞を追加
foreach($xml->ma_result->word_list->word as $item)
{
if ((ereg("ダタラ|モスマン|モコイ", $item->surface)==False) && (mb_strlen($item->surface) > 3*2))
{$meishi[]=$item->surface;}
}
//リプライの中に名詞がない場合の単語をセット(複数設定可)
if ($meishi[0] == "")
{$meishi = array("<censored>", "×××", "■■■");}
//名詞をランダムに選ぶ
$ran_meishi = $meishi[array_rand($meishi)];
//名詞を変換する
$message = ereg_replace("{ran_meishi}", "$ran_meishi", $message);
//------------------------------------------- ■■ここまで名詞拾い■■
【設定方法】
①アプリケーションIDにYahoo!デベロッパーネットワークのIDを入力します
②特定の単語を拾いたくない場合、「ダタラ|モスマン|モコイ」の部分を設定します。キャラの名前等、話しかけられる頻度の高い単語を設定してください。
③指定字数以下の名詞を拾わない場合「3*2」の部分を設定します。「3*2」の場合2文字以下の名詞は拾わなくなります。3文字以下の名詞を拾わせないようにするには「3*3」にします。これを設定しないと数字一文字でも名詞と判断してしまうのでちょっと厄介です。
④リプライの中に名詞がなかった場合、置き換える単語を設定します。「"<censored>", "×××", "■■■"」の赤字の部分に入れ込んでください。
⑤「tw.txt」の中に、拾った名詞を置き換えるメッセージを追記します。{ran_meishi}を拾った名詞に置き換えますので、適当に入れ込んでみてください。
例)上記の設定で、tw.txtに 「君は{ran_meishi}が好きなんだね」 と記述した場合
・botへのリプライ内容
「冷凍庫に氷とアイスを入れておいたら溶けました。責任取ってください。おっぱい。」
↓
・botからのリプライ内容
「君は冷凍庫が好きなんだね」
「君はアイスが好きなんだね」
「君はおっぱいが好きなんだね」
この3種類からランダムに選ばれます。
・botへのリプライ内容
「モスマンとモコイさんとヌエが好きです。ください。」
↓
・botからのリプライ内容
「君は<censored>が好きなんだね」
「君は×××が好きなんだね」
「君は■■■が好きなんだね」
この3種類からランダムに選ばれます。
以上です。
【参考にさせていただいたサイトさん】
・YAHOO!日本語形態素解析Web APIをPHPから使うサンプルコード
あと、PHPの記述でアドバイスいただいたmatさん、ありがとうございました!