• ブログ
  • ふぉとす
  • キーワード
  • ブックマーク
  • 写真
  • ログイン

Title

« バーベキューがおもしろかった | 簡単サーバー監視ツールを書いてみた »
  • アルゴリズム超重要 2007-11-22 00:00:00

     はてなダイアリーには、あるキーワードに対して自動的にリンクがはられる機能があります(ユルさんはこの機能が嫌いなのだそうです)。キーワードがはてなでは20万以上も存在しているので、ブログの記事の中にその20万のキーワードのどれかが存在しているかどうかを調べるなんてすごく大変そう(というか時間がすごくかかりそう)な印象を受けます。
     で、はてなではキーワード検索用の正規表現を公開していたりします。ためしに6000文字程度の記事に検索をかけてみます。

    #!/usr/bin/perl
    use strict;
    use warnings;
    use IO::File;
    use Time::HiRes;
    
    my $k_f = IO::File->new("hatena_keywordlist", "r") or die $!;
    my $keyword = $k_f->getline;
    $k_f->close;
    
    my $fh = IO::File->new("blog.txt", "r") or die $!;
    my @f_lines = $fh->getlines;
    $fh->close;
    
    my $str = "";
    $str .= $_ for (@f_lines);
    
    my @list;
    my $s_time = Time::HiRes::time();
    $str =~ s|
        ($keyword)
    |
        push @list, $1;
    |egiox;
    my $e_time = Time::HiRes::time();
    
    print "$_ " for @list;
    print "\n";
    print "time: ", $e_time - $s_time, "\n";
    

    ひさしぶりに稚拙なPerlです(はてなの正規表現がRubyで使えなかったので)。で、計測結果は、

    time: 0.810735940933228
    

    でした。
    正規表現は非決定性有限オートマトンを使っているそうなので、DFAで検索するようにすれば速くなりそうです。
    で、Rubyで作ってみました。仕事で使うことになりそうなので、とりあえずソースの公開はやめておきます。別にすごいことをやっているわけじゃなくて、ただの決定性オートマトンだけど。20万件のキーワード、6000字ほどの記事という、Perlと同条件でやってみた計測結果は

    time: 0.010049
    

    となりました。めちゃめちゃ速くなって一安心。
    たぶん、はてなも正規表現は使ってないんじゃないかなあ、という気もします。

    Commentコメント(2) Pageリンク元(17) Append 283
  • 涼宮ハルヒの溜息 (角川スニーカー文庫)
    メディア: 文庫
    集合知プログラミング
    作者/アーティスト: 當山 仁健,鴨澤 眞夫
    メディア: 大型本
« バーベキューがおもしろかった | 簡単サーバー監視ツールを書いてみた »

プロフィール

おおいしつかさ

Amazon商品の一覧

人気の記事ベスト10

  • 1.apache+mod_proxy_balancer+mongrelでRailsを動かす方法
  • 2.Perlでevalを使ってみる
  • 3.バージョン管理をsubversionからgitに移行してみた
  • 4.tokyobikeのドロップハンドル化
  • 5.ubuntu8.04でデュアルディスプレイを使う
  • 6.restful_authenticationを使ってみた
  • 7.URLなど、長い英字を折り返して表示する方法
  • 8.Rspecでコントローラのspecファイルを書く
  • 9.RailsとPostfixで受信メールを処理する方法
  • 10.フラグメントキャッシュをRailsで使う。

コメント

  • ユル(プログラマが若隠居をしたら)
  • ユル(風邪ひいた)
  • ユル(バイクがへたくそになっていた)
  • おおいしつかさ(便利になって不便になる)
  • 武石(便利になって不便になる)
  • ユル(劇場版 天元突破グレンラガン)
  • ユル(フラニーとゾーイー (新潮文庫): サリンジャー, 野崎 孝: 本)

過去の記事

2006年
12月
2007年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2008年
1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月

キーワード一覧

ActionScript AmazonResources git javascript kaeruspoon milook NSR Objective-C Rails Ruby Ruby on Rails subversion Thin tokyobike ubuntu VAIO VAIO typeZ Waves Xen ぐりぐり カンタロー スノボー ドトール ドライブ バイク プログラミング ユルさん 執筆 日本酒 模型 真中洋嗣 自転車

Youtube

ニコニコ動画