最新 RSS

horiday blog

2009/01/31

[perl] flickr API の flickr.tags.getClusters

職場で flickr API の flickr.tags.getClusters を使ってタグから関連する別のタグを得たいのでサンプルを作って欲しいと言われました.

flickr API は使ったことがなかったので,API Keyを作ってさっそく試してみました.

Flickr のサンプルは沢山あるだろうと思っていたのですが,手頃なサンプルがなくてFlickr and Perlが一番まともな感じでした.

問題の flickr.tags.getClusters はサンプルコードを Web 検索で見つけられなかったので,自分で適当に作ってしまいました.flickr.tags.getClusters で得られる結果を xpath でゴリゴリできるかと思っていたのですが,やり方がわからなかったので,結果の $response をそのままゴリゴリしました.このやり方は絶対間違っていそう...

下記のコードを実行すると,無事タグのクラスタが得られました.

% perl get-tagclust.pl schubert
tag: schubert
$VAR1 = {
  '1' => {
    'musica' => 1,
    'music' => 1,
    'piano' => 1
  },
  '0' => {
    'wien' => 1,
    'austria' => 1,
    'vienna' => 1
  },
  '2' => {
    'mozart' => 1,
    'haydn' => 1,
    'beethoven' => 1
  }
};

結果を見るとおそらく共起頻度の高いものをクラスタリングしているのでしょうね.

#!/usr/bin/env perl
# get-tagclust.pl
# usage:
#   get-tagclust.pl <tag>
use strict;
use Data::Dumper;
use Flickr::API;
local $Data::Dumper::Indent = 1;

my $tag = shift @ARGV || "cows";
my %tagclust = get_flickrtagclust($tag);

print "tag: $tag\n";
print Dumper \%tagclust;

sub get_flickrtagclust {
 my $tag = shift;
 my $api_key = 'xxx';
 my $api_secret = xxx'';
 
 my $api = new Flickr::API(
			    { 
			     'key' => $api_key,
		     'secret' => $api_secret,
			    });
  my $response = $api->execute_method('flickr.tags.getClusters',
			      {
				       'key' => $api_key,
				       'tag' => $tag,
			      });
  my @tmp = @{$response->{tree}{children}[1]{children}};
  my $count = 0;
  my %clust;
  foreach my $i (@tmp) {
    my @list = ();
    if ($i->{name} eq "cluster") {
      foreach my $j (@{$i->{children}}) {
	if ($j->{children}[0]->{content}) {
	  push @list, $j->{children}[0]->{content};
	}
      }
    }
    if (@list > 0) {
      foreach (@list) {
	$clust{$count}{$_}++;
      }
      $count++;
    }
  }

  return %clust;
}

関連リンク

2009/01/15

[diary] 年末年始

新年も 15 日が過ぎてしまいました...職場で「年末年始何してた?」という話題が未だに出ます.

「まったりしてました」とか適当なことを言っているのですが,実は年末年始にしたことの 1 つにキン肉マンの漫画を読んだことがあります.

本当は DVD が欲しかったのですが既に予約販売〆切でしたので,漫画を購入しました...

  • なぜかズラ状態のバッファローマン

漫画は中学校くらいから読んでなかったので,とてもひさしぶりでした.キン肉マンは小学校のときに好きで読んでいたんですよね.

空を自由に飛べる主人公達がなぜかリングから落ちて死んでしまったり,不思議な設定が多かったのですが,楽しく読めました.

30 をすぎで思い出補正を実践してしまいました.今年もがんばりたいと思います.

2009/01/07

[diary] ゲームを楽しむ秘密

年末年始に知り合いのこどもを連れて,私が子供のときに良く行ったおもちゃ屋の博品館に行ってきました.

こども達がおもちゃで遊んでいるのを観察していると,小さなこども達ながらそれぞれ個性があるものだと思いました.まず欲しいおもちゃを他人が持っていたとしても取ろうとするこども,他人におもちゃを譲ることができるこども,おもちゃを奪われると嫌になってしまうこどもなど 3 パターンくらいがいたと思います.

しばらく見ていると長くおもちゃで遊ぶことができるのは「他人におもちゃを譲ることができるこども」でした.おもちゃを強奪するこどもや他人に奪われると嫌になるこどもはおもちゃを巡る衝突が多い場面では耐えられないようです.

これは何だかどこかの本に書いてありそうな人生の哲学みたいですね.

うまくいかない人生とうまく向き合う,得るより与える,そういったことが結構大事なんだなと感じていました.