Yahoo形態素解析APIを使って文章を解析する方法

はじめに

やりたかったのは、こちらで書いたようにtwitter apiなどから取得したテキストからどんなキーワードが多く使われているかを取得したかった

mecabというフリーのツールでも実現できるのだが、yahooの形態素解析APIを使用すれうばアプリのキーを登録するだけで簡単に使用できるの今回はこちらを使ってみる。mecabを使う場合はインストールしたり辞書データも整備したりと以外とやることがありそう。今度それについては別途まとめてみたいと思います。また、APIを使用すると大抵利用制限(1日に使用できる回数)などがあるのでこれもデメリットだと思います

まずはYahooデベロッパーに登録

このページにアクセスしてf:id:yoppy0066:20150209084012p:plain
ページ右上の「アプリケーションを開発」ボタンをクリック

クリックすると以下のようなページがでてくるので、とりあえず1と2を書いてある通りに進めるとAPIが使用できるようになります。
f:id:yoppy0066:20150209084128p:plain

2の登録が完了すると「アプリケーションID」と「シークレット」という文字列が画面に表示されるのでAPIを使うさいはこの2つが必要になります。大事ななので他人には公開しないでください

実装

define("YH_APPID", "*****");//上記で取得したアプリケーションID
function callYhApi($text)
{
    $yh_url = sprintf(
        "http://jlp.yahooapis.jp/MAService/V1/parse?appid=%s&sentence=%s&filter=9&results=ma",
        YH_APPID,
        urlencode($text)
    );
    $response = simplexml_load_string(file_get_contents($yh_url));
                                      
    $result = array();
    foreach ($response->ma_result->word_list->word as $v) {
        $result[] = (string) $v->surface;
    }
    return $result;
}

使い方も簡単で上記のような関数を作りました。僕の場合はよく使われている単語を抽出したかったので、結果から名詞のみ拾ってよく使われている単語を抽出しました。

function callYhKeyPhraseApi($text)
{
    $yh_url = sprintf(
        "http://jlp.yahooapis.jp/KeyphraseService/V1/extract?appid=%s&sentence=%s",
        YH_APPID,
        urlencode($text)
    );
    $response = simplexml_load_string(file_get_contents($yh_url));

    $result = array();
    foreach ($response->Result as $v) {
        $result[(string) $v->Keyphrase] = (string) $v->Score;
    }
    return $result;
}

同じ様な使い方なんですけど、こちらはテキストから重要な単語をyahoo側でスコアつけして返してくれるさらに今回やりたいことにマッチしたAPIが準備されていました。どのようにスコアづけされているのかはわからないのですが、、、

以上です