プログラマでありたい

おっさんになっても、プログラマでありつづけたい

1日500アクセス以上アクセスくる幸せについて

1日500アクセス以上のブログは全ブログの●%:Garbagenews.com

ブログの1日の平均アクセス数を教えてください。

わからない、ほぼ0  	15.8%
1〜5程度 	19.9%
5〜10程度 	13.3%
10〜50程度 	26.3%
50〜100程度 	11.6%
100〜200程度 	6.7%
200〜500程度 	4.1%
500〜1000程度 	1.2%
1000〜2000程度 	0.7%
2000〜5000程度 	0.1%
5000以上 	0.3%

 サンプルとしての有為性はともかく、一日50アクセス以下が75%くらい。スパムブログを加えたら、数10程度の比率はもっと高くなるでしょう。私の実感としてもこれくらいなんではないかと思います。今をときめくはてなアイドルのdropdbさんの場合、日に5000くらいだそうです。全体で考えると0.1%。妥当な数字に思えます。
 このブログを始めて半年くらいで、最近ようやくコンスタントに100を超えるようになりました。中央値をちょっと超えたくらいですね。自分の為のブログと割り切っていても、読んでくれる人がいると嬉しい限りです。
 ちなみに私の場合、用途別に幾つかブログを書いているのですが、プログラム系だとはてなの場合数倍読んでくれる人が集まり易いように感じます。livedoorなんかの場合だと一般的なネタだとアクセスはどっと増えるのですが、プログラムを載せたとしてもGoogleにキャッシュされるまでとんと反応はありません。この点、はてなの場合トラックバックをくれたり、記事について言及してくれたりと、フィ−ドバックを感じてありがたい限りです。例えトラックバックが無かったとしても、アクセスログを見ているだけでも、自分と同じ関心領域の人の検索キーワードを見ているだけでも勉強になるんですよね。(ちなみにこのブログだと、投資系とプログラム系で半々くらいです)
 ここ数年でブログが急激に一般的になった反動で、もう少ししたら反動で批判等も出て来ると思いますが、この手軽さは重要だと思います。人様のお役に立っているかはなはな疑問ですが、1ブロガーとして世の中を0.001%でも良くなるエントリーを書いていきたいものですね。

題名と本文関係なし

特徴語抽出のあれこれ

 最近の特徴語抽出の手法ってどんなんかなと思って、はてなの注目のエントリーを見てみました。
タグ「特徴語抽出」を含む注目エントリー


 面白いものが目白押しです。
特にGigazinizeというのは、秀逸です。面白いなぁ〜。
http://blog.fulltext-search.biz/articles/2007/09/03/gigazinize
Gigazinize のなかみ


 私も何か作ってみたくなりました。書籍データやらWikipediaやらのデータは色々あるので、そのあたりを組み合わせてみようかと思います。その前に特徴語を抽出する為のツールです。(だいぶ昔に作ったものですが。)ロジックは、たつをさんが紹介している下記の方法です。


形態素解析と検索APIとTF-IDFでキーワード抽出
 形態素解析とYahoo APIを使って特徴語を抽出する方法です。さっくりと作れて、それなりに使えます。ただ、つどWeb検索に行っているのでそれなりに遅いです。要は文章の母集団があればよいので、Yahoo APIの部分をWikiPediaから作ったコーパス等に置き換えたらかなり早くなると思います。
下はYahoo APIを使った場合のサンプルです。

use LWP::Simple;
use MeCab;

my $file = shift @ARGV;
my $population = 19200000000;
my $hit;
my $content;
my @feature;
my %result;

$content = readFile($file);
@feature = &parseText($content);
%result = countFeature(@feature);

foreach $key (keys %result) {
  $hit = &get_num($key);
  $tfidf = calcTFIDF($result{$key},$hit,$population);
  print "key=$key,hit=$hit,tfidf=$tfidf\n";
}

sub parseText {
    my $content = shift @_;
    my $m = new MeCab::Tagger ("-Ochasen");
    my @feature = ();
    for (my $n = $m->parseToNode ($content); $n; $n = $n->{next}) {
        if ($n->{feature} =~ /名詞/) {
            push @feature,$n->{surface};
        }
    }
    return @feature;
}

sub countFeature {
    my @feature = sort(@_);
    my $str="";
    my $prev="";
    my $cnt=0;
    my %feature;
    foreach $str (@feature) {
      if ( defined  $feature{$str} ) {
        $feature{$str}++;
      } else {
        $feature{$str}=1;
      }
    }
    return %feature;
}

sub readFile {
    my $file = shift @_;
    open FH, "<$file";
    my $content = join '', <FH>;
    close FH;
    return $content;
}

sub get_num { # 検索ヒット数獲得 by Yahoo! API
    my ($key) = @_; # UTF-8
    $key =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
    my $url = "http://api.search.yahoo.com/WebSearchService/V1/".
        "webSearch?appid=YahooDemo&query=$key&results=1";
    my $c;
    ($c = get($url)) or die "Can't get $url\n";
    my ($num) = ($c =~ /totalResultsAvailable="(\d+)"/);
    return $num;
}

sub calcTFIDF {
  my $tf = shift @_;
  my $df = shift @_;
  my $n = shift @_;
  
  my $tfidf;

  eval {
      $tfidf = $tf*log($n/$df);
  };
  return $tfidf;
}

次は、コーパス部分を変更したいと思います。
Yahoo APIからWikipedia