タグクラウドについてお勉強中

お仕事でタグクラウドを実装してみようみたいな話が挙がっておりまして。

ちょっと NDA とか絡むので詳しくは書けないけど、だいたい以下のような感じで実装してみた。

  1. あるタグに関連するタグを任意の方法で抽出する。
    • この際に、それぞれのタグについてタグの重みを計算するための属性を保持させる
  2. 抽出したタグの中で重み属性が最大なもの (max) と最小なもの (min) を取得する
  3. 最大・最小の平方根 (max_sqrt, min_sqrt) を求める
  4. 係数を算出するために、タグの段階数 (n) を最大な平方根 (max_sqrt) と最小な平方根 (min_sqrt) の差で割る
  5. 最後に、抽出したタグ達の重み属性の平方根 (any_sqrt) と最小な平方根 (min_sqrt) の差に係数を掛ける

と、まぁこんな感じなんだけど、文字じゃ分かり辛いと思うので PHP 的な式に変換してみる。

<?php
/*
 * ・$tags は予め取得されているモノとする
 * ・$tags は下記のような構造を想定する
 *   $tags = array(
 *    'tag' => array(
 *     "タグ1",
 *     "タグ2",
 *     "タグ3",
 *     ...
 *    ),
 *    'number' => array(
 *     10,
 *     5,
 *     2,
 *     ...
 *    )
 *    'level' => array(
 *     0,
 *     0,
 *     0,
 *     ...
 *    )
 *   );
 *   ※ level は計算で求めるため、初期値は 0 としておく
 * ・係数算出のための段階数は 5 段階とする
 * ・数値が 0 だったら?とかはとりあえず無視する
 */
$max = max($tags['number']);
$min = min($tags['number']);
$max_sqrt = sqrt($max);
$min_sqrt = sqrt($min);
$coefficient = 5 / ($max_sqrt - $min_sqrt);
foreach ($tags['number'] as $index => $number) {
    $any_sqrt = sqrt($number);
    $level = ($any_sqrt - $min_sqrt) * $coefficient;
    $tags['level'][$index] = $level;
}
?>

まぁ、だいたいこんな感じかな? (試してないから分からんけど)

あとは以下のような CSS でも定義してあげて、HTML を出力してあげれば良いんじゃないかな?

div.tag-cloud span.level-0 {
    font-size: 1em;
}

div.tag-cloud span.level-1 {
    font-size: 1.2em;
}

div.tag-cloud span.level-2 {
    font-size: 1.5em;
}

div.tag-cloud span.level-3 {
    font-size: 2em;
}

div.tag-cloud span.level-4 {
    font-size: 2.5em;
}

div.tag-cloud span.level-5 {
    font-size: 3em;
}
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"; // ショートタグ対策 ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
  <head>
    <title>Tag Cloud</title>
    <link rel="stylesheet" href="/css/tag-cloud.css" type="text/css" media="all" />
  </head>
  <body>
    <div class="tag-cloud">
<?php
foreach ($tags['tag'] as $index => $tag) {
?>
      <span class="level-<?= $tags['level'][$index]; ?>">
        <?= $tag; ?>
      </span>
<?php
}http://d.hatena.ne.jp/images/admin/markup_url.gif
?>
    </div>
  <body>
</html>

まぁ、サンプルなんで細かいところは気にしない。

だいたいこんな感じ、ってことで。

詳しくは kjirou さんのブログの "http://kjirou.sakura.ne.jp/mt/2007/09/post_57.html" を参照のこと。

Parallels な CentOS のカーネルがお亡くなり!?

もうね。死にたさ満点ですよ。

色々調べた結果、LVM なディスクの MBR がイッたんじゃないかな?とか思っています。

んで、どうにかこうにか頑張って KNOPPIX にて復旧作業中。

なんかやたらと色々時間がかかるのは仕様ですか。そうですか。

どうにも中のファイルも破損してるらしく、作業は難航を極めておりますですよ。

後でレポートするかも。

続きを読む

NIC が認識しないわけで

お仕事でそろそろ開発機を新しくしようってことになって、色々構築していたわけですが、お約束の問題が発生したわけですな。

NIC が認識しない!!

CentOS 4.6 Final をインスコして、さぁ、これからって時に「あれ?外に出れない!?」「ってかそもそもネットワークの設定とかをインストール時に聞かれなかったなぁ…。」てな感じですよ。

まぁ、LinuxNIC のドライバが無いことが多いのでしゃーないんですけど。

マウスコンピュータで買った OS レス・モニタ無しモデルで、当然 LAN の口もオンボードだから認識なんて、まぁ出来ないわな。

ほんで、しゃーないから NIC 買って来た。

プラネックスのギガビットイーサ対応のソレを使ったですよ。

まぁ、そんだけ。

mod_rewrite の NE なフラグ

本日、お仕事で大掛かりなサーバメンテナンスがあり、それに伴って Apache の設定をちょっくら書き換えました。

んで、その時に、Flash から呼び出されて JSON を返すようなウェブアプリがあるんですが、それがどうにもエラーを起こしている事が判明。

ってか、正確に言うとそもそも Flash から呼び出す段階で 404 Not Found になってるんですな。

んで、調べてみたところ、mod_rewrite が悪さをしていることが判明。

つーか、寧ろこっちの設定が悪いんだけどね!!!orz

ってことでその詳細。

続きを読む

iPod touch の脱獄してみたお

あんまりおおっぴらに書くのもアレな感じだけど、脱獄してみました。

記憶の範囲で書いてみる。the 備忘録。

参考迄に、ボクの環境は Mac OSX Leopard, iTunes 7.6, iPod touch 1.1.3 (Software Upgraded) ですた。

続きを読む

MySQL に於ける複合インデックスについて。

MySQL 等の RDBMS の複合 INDEX って、指定したカラムの順序が非常に重要です。

んなの当たり前だろ!って言わないで下さい。

まぁ、そんなこんなでお馴染みの備忘録ですな。

続きを読む