そんな話はそこら中にあるでしょうが、まあ念のため。
結果をいただくだけなら大したことないけど、結果の使い方を忘れちゃうので。
ひょっとしたら変なこと、やばいことをしている可能性もありますが。
まずは結果をいただくところ。
/**
* Yahoo!形態素解析を行う。
* @param $appid string アプリケーションID
* @param $text string 解析対象テキスト
* @param $results string 結果の種類 "ma" or "uniq" or "ma,uniq"
* @return SimpleXML 結果
*/
function yahoo($appid, $text, $results = "uniq") {
$data = array("appid" => $appid, "sentence" => $text, "results" => $results);
$response = http_post("http://api.jlp.yahoo.co.jp/MAService/V1/parse", $data);
if ($response === false) {
return false;
} else {
return simplexml_load_string($response);
}
}
/**
* http postを行う。
* @param $url string URL
* @param $data array postするデータ。連想配列で渡す。?a=1&b=愛 なら array('a'=>1, 'b'=>'愛')
* @param $optional_header array 追加で渡したいリクエストヘッダ
* @return string 結果
*/
function http_post($url, $data, $optional_header = null) {
$data = http_build_query($data, "", "&");
//header
$header = array(
"Content-Type: application/x-www-form-urlencoded",
"Content-Length: ".strlen($data)
);
if (null !== $optional_header) {
array_push($header, $optional_header);
}
$context = array(
"http" => array(
"method" => "POST",
"header" => implode("\r\n", $header),
"content" => $data
)
);
return file_get_contents($url, false, stream_context_create($context));
}
yahoo()にappid(Yahoo!デベロッパーなんたらでもらえる)=$appidと解析対象のデータ=$textを渡せばSimpleXMLで結果を返します。$resultsは”uniq”か”ma”を渡すことができて、”uniq”だと形態素がディスティンクトされて(同じものはマージされて)帰ってきます。”ma”ならそんなことせずに返します。まあ、実は両方渡せたり(”ma,uniq”)、ほかにもいろいろパラメータあったりしますがそんなのはめんどくさいので無視です。できるだけ簡単に使いたいんです。
http_post()は特にyahooに特化しているわけではないです。単にpostする関数です。どっかから拾ってきてぱくってきた気がします。
で、結果を使うとき。
$xml = yahoo("xxxxxx", "特にyahooに特化しているわけではないです。単にpostする関数です。どっかから拾ってきてぱくってきた気がします。", "ma");
foreach ($xml->ma_result->word_list->word as $word) { // "uniq"にしたときは$xml->uniq_result
// ma_resultの下にあるword_listのさらに下にwordがいっぱいぶら下がってます。
$words[] = (string)$word->surface; // 形態素はsurfaceです。「特化」とか「いる」とか「関数」とかそんなん。
if ($word->pos == "名詞") {
// 品詞はposに入っています。
// 形容詞,形容動詞,感動詞,副詞,連体詞,接続詞,接頭辞,接尾辞,名詞,動詞,助詞,助動詞,特殊
// があります。
$meishi[] = (string)$word->surface;
}
}
投げっぱなしですが・・・・
以上