キーワード頻度と密度
先日の解析結果「$handler->tags[$i]['img']['alt']」や「$handler->datas」のテキストデータからキーワード(名詞)を抜き出して何回書かれているか、密度はどのぐらいかを調べます。
単語を取り出すには茶筌や和布蕪を使いたいところですがYahoo! WEB Serviceにテキスト解析APIがあるのでこれを使っちゃいましょう。
他のYahoo! WEB Serviceと同じく24時間で50,000リクエストが上限ですが、一度のリクエストの上限が100kbyteもありますし個人で使うには十分でしょう。
まず解析するテキストデータをwhileか何かを使って1つにまとめましょう、スペース1つ挟んで繋いだ方が無難だと思います。このときついでに>や&なども戻しておきましょう。
//リクエストURL $service_url = "http://api.jlp.yahoo.co.jp/MAService/V1/parse"; $params = array( 'appid' => YOUR_APPLICATON_ID, //アプリケーションID 'results' => 'uniq', //解析結果の種類uniqは出現頻度 'response' => 'surface', //形態素情報surfaceは元の情報 'filter' => '9', //フィルター名詞だけ欲しいので9 //解析するテキストをUTF-8に変換 'sentence' => mb_convert_encoding($textdata, 'UTF-8', 'Shift_JIS'), );
必要なクエリを配列に格納
$service_url .= '?' . http_build_query($params, '', '&');
$result = simplexml_load_file($service_url);
print_r($result);
URLとクエリを連結、返ってきたXMLをパースしてオブジェクトに代入
PHP4やallow_url_fopenがdisableの場合はPEAR::HTTP_RequestとPEAR::XML_ParserやSnoopyなどを使ってください。(12月6日のように手書きでもいいですが面倒です。)
Googleで実行した結果の一部です
SimpleXMLElement Object ( [uniq_result] => SimpleXMLElement Object ( [total_count] => 106 [filtered_count] => 44 [word_list] => SimpleXMLElement Object ( [word] => Array ( [0] => SimpleXMLElement Object ( [count] => 5 [surface] => Google ) [1] => SimpleXMLElement Object ( [count] => 3 [surface] => 検索 )
[filtered_count]がフィルターを通した結果の合計です、この場合は名詞が44個あります。
[surface]はキーワード(名詞)、[count]はキーワードがページに含まれている数です。
キーワード「Google」は5/44で「11.4%」となります。