Yahoo!のウェブ検索Webサービスを使った簡単なキーワード抽出

この前はYahoo!の「日本語係り受け解析」を使って簡単な構文解析をしてみたので,今度は「ウェブ検索」と「日本語形態素解析」を使った簡単なキーワード抽出をしてみる.
今回も言語はPHP(初心者ぺちぱーですw).

大まかな処理の流れは以下.
本当に簡単なキーワード抽出なので,別に有用な語が取れるわけではないし,精度が良いわけでもない点はご了承を.

  1. ウェブ検索を使って検索.
  2. TitleフィールドとSummaryフィールドを抽出.
  3. 2を入力文として日本語形態素解析を使って形態素解析
  4. posフィールドを判定し,"名詞"or"接頭辞"を抽出し,また出現が連続するなら連結する.
  • -

動作例として,索引語「"福田康夫"」でキーワードを抽出してみる.
検索するドメインは,なんとなくasahi.comで,取得検索件数は30件にした.
以下に取得結果の一部の載せておきます.

◎総取得キーワード数:404個
[キーワード] => 個数

  • -

[福田康夫首相] => 25
[辞任] => 12
[自民党総裁選] => 9
[辞意表明] => 4
[閣僚人事] => 3
[退陣] => 3
[辞任表明] => 3
[政権投げ出し] => 3
[解散] => 3
[背水の陣内閣] => 2
[太田昭宏代表] => 2
[中曽根康弘元首相] => 2
[安倍晋三前首相] => 2
[安心実現内閣] => 2

  • -

念のため言っておくと,Titleを加工せず形態素解析の対象にしてるので,[asahi]と[com]というキーワードが毎回出力されるけど,不要なら適当に除去すればOK.

まぁ抽出された総キーワード数が404個もあるし,中には意味不明なキーワードもあるけど,

  • 1文字のキーワードは削除
  • 数字のみのキーワードは削除

あたりを行えば,大体消えると思う.
特に画期的な手法は使わず,ただ単に名詞(と接頭辞)を連結しただけだけど,このレベルのキーワード抽出ならできるんだよーということ.

  • -

ソースはこんな感じで.

<?php
	$apiid = "アプリケーションID";
	$text = '"索引語"';
	$result = 取得件数(50);
	$url = "http://search.yahooapis.jp/WebSearchService/V1/webSearch?appid=".
		$apiid."&query=".urlencode($text)."&results=".$result."&site=www.asahi.com";
		
	$xml = simplexml_load_file($url);
	//print_r($xml);
	//アウトプットを確認したいときにコメントアウト
	
	$results = $xml->Result;
	$i=0;
	foreach ($results as $result) {
		$query = $result->Title."".$result->Summary;
		$url_m = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=".$apiid."&sentence=".urlencode($query);
		$xml_m = simplexml_load_file($url_m);
		$words = $xml_m->ma_result;
		foreach($words as $word){
			$morphemes = $words->word_list->word;
			foreach($morphemes as $morpheme){
				if($morpheme->pos == "名詞" || $morpheme->pos == "接尾辞"){
					$str[$i] = $str[$i].$morpheme->surface;
				}else{
					$i++;
				}
			}
		}
	}
	foreach($str as $noun){
		$num[$noun]++;
	}
	arsort($num);
	print_r($num);
?>

こんなところでーす.

  • -

関連エントリー:
PHPで「日本語係り受け解析Webサービス」を使ってみた - kakku blog