Yahoo! 日本語形態素解析 API を使った PHP プログラムを作ってみた

ブログ記事のキーワード出現頻度を調べたくて、Yahoo! が提供している日本語形態素解析 API を使ったプログラムを作ってみました。

Yahoo! 日本語形態素解析API はこちら を参照してください。

前手順としてまず Yahoo!デベロッパーネットワーク アプリケーションの管理 から「Yahoo! アプリケーション ID」を取得しておいてください。

実際に動かせるプログラムのサンプルを載せておきます。

$api = 'http://jlp.yahooapis.jp/MAService/V1/parse';
$appid = '<Yahoo!アプリケーションID>';
$params = array(
    'sentence' => $_POST('textArticle'),
    'results' => 'uniq',
    'filter' => '1|2|3|4|5|6|7|8|9|10'
);
$ch = curl_init($api);
curl_setopt_array($ch, array(
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_USERAGENT      => "Yahoo AppID: $appid",
    CURLOPT_POSTFIELDS     => http_build_query($params),
));

$result = curl_exec($ch);
curl_close($ch);

$xml = new SimpleXMLElement($result);
echo htmlspecialchars(print_r($xml, true));

CURL を使って POST リクエストを投げ、戻り値である XML データを SimpleXML で解析するというものです。

Yahoo! の API を使うポイントとしては、CURLOPT_USERAGENT の指定をするぐらいでしょうか。

パラメーターには、出現頻度情報を取得したいので results に uniq を指定し、filter には助詞・助動詞・カッコなどを省く値を指定しています。

あとは、通常の CURL のプログラムと変わらず、API へ渡すべきパラメーターを PHP の連想配列から http_build_query() 関数で生成し、CURLOPT_POSTFIELDS へ渡しています。

最後に print_r() の第二引数に true を渡して文字列化し、HTML の整形を行って表示させています。

echo 部分を下記の様に書き換えれば、table タグで表にした結果を得ることができますね。

echo '<table border="1">';
echo '<tr><th>出現数</th><th>単語</th></tr>';
foreach ( $xml->uniq_result->word_list->word as $node) {
    echo '<tr>';
    echo "<td style='text-align:right;'>{$node->count}</td>";
    echo "<td>{$node->surface}</td>";
    echo "</tr>n";
}
echo '</table>';

まとめ

XML の技術が出たときは XML ウェブサービスが全体だったので、SOAP などを中心とした技術基盤を構築するだけで大変でした。

PHP で XML を扱うにも、DOM をベースとした操作だったのですごく冗長でつまらなかったものです(笑)

今はウェブサービスも多くが REST 形式で取得できますし、XML も簡単に連想配列の入れ子構造に変換できるので、便利になりましたね。

え?Webサイトのバックアップ、してないの!?

いざという時には復旧までしてくれる
『ワードプレス外部バックアップサービス』

■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ

コメントを残す