ホーム > タグ > Yahoo! API

Yahoo! API

Webセルオートマトン - 挫けそう

後回しと言っていたWebセルオートマトンですが、ブログ集約サイトのページ構成が頭に浮かばないままだったので、とりあえず手をつけてみました。

で、とりあえずセルオートマトンの核となる世代交代の処理を完成させ動かしてみました。

形態素解析にはYahoo! APIを使ってて、ある程度予想はしていましたが、出現する単語が、”by”とか”at”とかHTMLの実体参照の記述の一部と見られる文字など、単体では意味のない単語が頻出しました。

でまぁ、そういう単体では意味のない単語を除外するため、ちまちまと禁止単語リストを作成して、それなりに意味のある単語が残るようにはなりましたが、何度か世代交代させてるうちに処理スピードの遅さが目立ってきました。

検索結果の取得も、ページの内容の取得も、形態素解析の結果の取得も、インターネット経由であり、処理スピードの遅さもその部分が原因だということは深く考えるまでもなく分かりました。

で、とりあえず形態素解析をYahoo! APIからmecabに切り替え、 検索結果の取得とページの内容の取得の部分をローカルにキャッシュするようにしました。(今回のセルオートマトンでは1回の世代交代で同じキーワードで複数回検索処理が動く可能性が高いため)

で、ある程度早くなったものの、それでも8世代目以降になるとアホのように時間が掛かります。20分とか。

それでどこがボトルネックなのかを調べるため、世代数と処理時間の関係を調べてみると、7世代までは生きてるセル数と処理時間がほぼ比例してるのですが、8世代以降に処理時間が跳ね上がっています。

さらに、8世代以降は、HTTP_Clientがタイムアウトのエラーを出すようになっていたので、外部ページの取得で時間が掛かっているのは明白です。

とまぁ、今回はここまでです。HTTP_ClientからHTTP_Requestに切り替えて、タイムアウト10秒とかで処理するようにしてみたいと思います。

Webセルオートマトン - Yahoo! APIで形態素解析

Yahoo! APIを使う場合の大まかな流れは、「APIへリクエストを送るためのURLの組み立て→そのURLでデータを取得→XML解析して必要な情報を取得」ってところだと思いますが、個人的には最後の2つ「そのURLでデータを取得→XML解析して必要な情報を取得」については、simplexml_load_fileを利用するのが簡単です。

URLの組み立てについては、オフィシャルを見ると十分でしょう。

そんなこんなで、Yahoo!APIを使い形態素解析をしてくれるクラスを作成し、さらに、そのクラスを利用し、あるURLの文章の中で一番出現頻度の高い単語を取得する関数を作成しました。SimpleXMLクラスの扱いにちょっと戸惑いましたが、Yahooの形態素解析の場合は、簡単に次の方法で一番出現頻度の高い単語を取得できます。

$xml = simplexml_load_file(Yahooの形態素解析へのリクエストのためのURL);
$keyword = $xml->uniq_result->word_list[0]->word[0]->surface;

これで$keywordに一番出現頻度の高い単語が取得できます。
実際は、エラー処理などでもっと複雑になってます。

とりあえず、URLを渡すと文章を取得しその文章をYahooの形態素解析にかけて、一番出現頻度の高い単語を取得する関数が完成しました。
次は、単語を渡すとYahoo検索結果の1件目のURLを返す関数を作成したいと思います。

Webセルオートマトン - ページの取得

Webセルオートマトンについては、これから製作記ということで連載していきます。

Webセルオートマトンの概要については昨日のエントリを見てもらうとして、肝となる技術を攻略することから始めたいと思います。

Webセルオートマトンでは、Yahoo!の検索APIと形態素解析APIを利用し、「Yahoo!検索→結果の1件目のページの本文を取得→その本文を形態素解析」という流れが核となる処理になります。

その中で、Yahoo!のAPIに関しては、この前作ったSEO遊びのためのサイトで実際に使ったので(検索機能だけですが)、問題なく可能だと思うのですが、URLから本文を取得する処理を実装したことが無いので、その方法を調べてみました。

「php url 本文取得」でググってみると、どうもPEARのHTTPClientを使うと良いようで。

早速テスト的に最小限のコードを書いてみました。

< ?php
//テスト
require_once "HTTP/Client.php";

$client =& new HTTP_Client();
$client->get(’http://peta.okechan.net/blog/’);

$response = $client->currentResponse();
echo $response['body'];
?>

最初、require_onceでClient.phpが無いよというエラーが出たので、
#pear install HTTP_Client
を実行してHTTPClientをインストールしたら、普通に使えるようになりました。
便利な世の中になったものです。

これでテストプログラムも動作するようになり、意外と今回のWebセルオートマトンは作るのが簡単なんじゃないかという気がしてきました。

トップページ > タグ > Yahoo! API

検索
フィード
メタ

ページの最初に戻る