2chのスレッドタイトルをクラウド化 threadTitleCloud b0.1.0

Yahooの日本語形態素解析Webサービスを利用して、2chのスレタイをタグクラウドに投げ込んでみました。

作りながら妄想してたほどには面白くなかったです。うーん。HTML/TagCloudの使い方をもう少し勉強するなり、閾値上げてみるなりして、視覚的面白さを優先した方がいいのかも。プルダウンで閾値弄れるといいのかも。まあとりあえずベータ0.1.0ってことで。

参考
Yahoo!デベロッパーネットワーク – テキスト解析 – 日本語形態素解析 http://developer.yahoo.co.jp/jlp/MAService/V1/parse.html
ヤフー、文章を解析できるAPI「日本語形態素解析Webサービス」を公開:ニュース – CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20351038,00.htm
Do You PHP はてな – Yahoo!の日本語形態素解析Webサービスを使ってTwitterで流行っているキーワードをクラウド化
http://d.hatena.ne.jp/shimooka/20070618/1182163865

コード

ライセンスはApache License, Version 2.0です。licence.txt

<?php
/**
* threadTitleCloud b0.1.0
* Copyright 2007 sanemat
*
* 参考
* Do You PHP はてな - Yahoo!の日本語形態素解析Webサービスを使ってTwitterで流行っているキーワードをクラウド化
* http://d.hatena.ne.jp/shimooka/20070618/1182163865
*
*/
/* 準備 */
date_default_timezone_set('Asia/Tokyo');
mb_internal_encoding('UTF-8');
require_once('HTTP/Client.php');
require_once('HTML/TagCloud.php');
$target = '[対象の板]';
$applicationID = '[Yahoo! DEVELOPER NETWORKのアプリケーションID]';
$ua = 'Monazilla/1.00 (threadTitleCloud b0.1.0)';
$urlYahooAPI = 'http://api.jlp.yahoo.co.jp/MAService/V1/parse';
$title = 'threadTitleCloud';
$poweredby = 'threadTitleCloud b0.1.0';
$description = 'boardName '.date('r');
/* 関数 */
//mb_str_replace - fetus
//http://fetus.k-hsu.net/document/programming/php/mb_str_replace.html
/**
* マルチバイト対応 str_replace
*
* @version     Release 2
* @author      HiNa (hina@bouhime.com)
* @copyright   Copyright (C) 2006-2007 by HiNa(hina@bouhime.com).
*/
/* 省略 */
/* メインルーチン */
//subject.txtを取ってくる
$urlSubjectTxt = $target.'subject.txt';
$cli = new HTTP_Client();
$cli -> setDefaultHeader(
  array(
    'user-agent' => $ua
  )
);
try {
  $cli -> get($urlSubjectTxt);
} catch (PEAR_Error $e){
  header("$_SERVER[SERVER_PROTOCOL] 400 Bad Request");
  header('Content-Type: text/plain;charset=UTF-8');
  exit($e->getMessage());
}
//Yahoo!APIが食べやすいように整形
$response = $cli -> currentResponse();
$html = $response['body'];
mb_convert_variables('UTF-8','SJIS-win',&$html);
$arraySubjectTxt = explode("\n", $html);
$pattern = '`^.*<>(.*)[ ]\(.*\)$`';
$text = array();
$i = $j = 0;
foreach($arraySubjectTxt as $value){
  $i++;
  if($i % 400 === 0){$j++;}
  preg_match($pattern, $value, $match);
  $temp = mb_convert_kana($match[1], 'KVas', 'UTF-8');
  $temp =  mb_str_replace(' ', '', $temp, 'UTF-8').' ';
  $temp = preg_replace('`[0-9]`u','',$temp);
  $text[$j] .= $temp;
}
//Yahoo!APIをコール
$call = new HTTP_Client();
foreach($text as $value){
 
  $param = array(
      'appid'    => $applicationID,
      'sentence' => $value,
      'results'  => 'uniq',
      'filter'   => '9'
    );
 
 
  try {
    $call -> post($urlYahooAPI, $param);
  } catch (PEAR_Error $e){
    header("$_SERVER[SERVER_PROTOCOL] 400 Bad Request");
    header('Content-Type: text/plain;charset=UTF-8');
    exit($e->getMessage());
  }
 
  $response = $call -> currentResponse();
  $xml[] = new SimpleXMLElement($response['body']);
}
$arrayWord = array();
foreach($xml as $value){
  foreach ($value->uniq_result->word_list->word as $wd) {
    if(array_key_exists((string)$wd->surface, $arrayWord)){
      $arrayWord[(string)$wd->surface] += (int)$wd->count;
      continue 1;
    }
    $arrayWord[(string)$wd->surface] = (int)$wd->count;
  }
}
//HTML_TagCloudにタグと回数を食べさせる
$max_count = false;
$cloud = new HTML_TagCloud();
foreach ($arrayWord as $key => $value) {
    if ($max_count === false) {
        $max_count = $value;
    }
    $cloud->addElement($key, null, $value * (10000 / $max_count));
}
echo $cloud->buildHTML();

動作確認では狼板を対象にしました。あと上のコードに加えてCache/Lite使ってます。

追記(2007.06.26 08:13)
コードをこっそり修正。foreachの中で間違えてbreakしてたのをcontinueに。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中