タグ

algorithmとperlに関するtarchanのブックマーク (4)

  • 乱数と Perl5 にかんする蘊蓄の話 - tokuhirom's blog

    乱数と Perl5 にかんする蘊蓄の話 Perlの乱数についてIRCで盛り上がったのでまとめておく。 結論からいうと、srand()はPerl5組み込みのものでよい。乱数の生成はMath::Random::MTがよいとおもう。 Perlのrand()の実装はConfigure時に選べるようだが*1、ふつうはdrand48()がつかわれる。これは下位ビットがまったくランダムでないことで知られるrand(3)よりはましだが、しょせん線形合同法なのでセッションIDなどを作るのには安全ではない。安全な乱数を作るためにtime()やSHA1を混ぜ込んだりするほうほうもよくつかわれるが、そのくらいならはじめからM::R::MTを使ったほうがいいとおもう。 なお、srand()はあれば/dev/urandomを読むので、自前でsrand(time)などとするのはよくない。また、最初にrand()を呼ぶと

  • ギレンも登場!BM25なPerlモジュール書いたよ - download_takeshi’s diary

    久しぶりに何か書きます。 情報検索のアルゴリズムで「BM25」というものがあります。 何年か前に某研究所に遊びに行ったときに「TF/IDFより精度のいいやつ」みたいな感じでかなりアバウトに教えてもらいました。 その時は「名前だけでも覚えて帰ろう」と思っていたのですが、帰りに安い居酒屋で大酒をのみ、電車のなかで騒いでしまうほど酔っ払ってすっかりその名前を忘れてしまってました。(なにやってんだか・・・) で、最近Web+DB pressをパラパラ見ていたらBM25の名前を発見!ああ、これだこれだ、思い出したよ! というわけで、重い腰を上げてモジュール化してみました。 githubに上げてあります。 Lingua::JA::OkapiBM25 http://github.com/miki/Lingua-JA-OkapiBM25 そのうちCPANからも落とせるようになります。 正式名称は「Okap

    ギレンも登場!BM25なPerlモジュール書いたよ - download_takeshi’s diary
  • Perl で Range Coder (再挑戦) - naoyaのはてなダイアリー

    以前にも Perl で Range Coder を実装した (http://d.hatena.ne.jp/naoya/20080927/1222512024) のですが、当時は理解も曖昧なまま速度にも気を遣わずに実装していました。 再度改めて、Range Coder を実装してみました。 http://github.com/naoya/perl-RangeCoder/tree/master README に記載した通り、静的 Range Coder*1、Binary Indexed Tree を用いた適応型 Range Coder、それからついでに 1-order の有限文脈モデルをもちいたものを作ってみました。いずれも Algorithms with Python の情報 (1, 2, 3)を参考に実装しています。 Canterbury Corpus の alice29.txt は 0-

    Perl で Range Coder (再挑戦) - naoyaのはてなダイアリー
  • dfa-0.01 正規表現から DFA へ(NFA 経由版) - Tociyuki::Diary

    機能限定版の正規表現をトップダウン構文解析して非決定性有限オートマトン(NFA)を生成し、それから部分集合構成法で決定性有限オートマトン(DFA)を生成するコードを Perl で書いてみました。 扱う正規表現は、総称文字(.)や文字クラス([][…][])が使えず、1文字そのものしか扱えず、繰り返し指定は ? と * しか使えません。括弧 (…)は Perl の (?:…) に相当し、パターンの記憶はできません。複数選択の | は使えます。 ネタ元のドラゴンブックの字句解析部の説明で使われているプログラミング言語の断片の字句を Perl 風にちょっと変更した正規表現を DFA にして字句それぞれにマッチさせるサンプルを書くと次のようになります。 (追記) このパッケージの DFA と NFA の match メソッドは m/\A…\z/ の動作をします。 #!/bin/env perl u

    dfa-0.01 正規表現から DFA へ(NFA 経由版) - Tociyuki::Diary
  • 1