タグ

perlとalgorithmに関するkiyo_hikoのブックマーク (7)

  • pure perlで文書検索のアルゴリズムを考える - OKWAVE

    (モジュールは別として)pure perl で文書検索のアルゴリズムを考えています。 このアルゴリズムが頭良いか、悪いかのツッコミをお願いします。 1.前提 mecabを使用 2.文書を書き込むとき mecabで全文書を解析して、単語ごとにデータベースに入力する。 キー:単語 中身:そのページ名がたくさんはいったもの 3.文書を削除するとき mecabで全文書を解析して、単語ごとにデータベースに入力されたものを削除する 4.文書が変更になったとき 3→2を行なう 5.検索するとき 検索キーワードをmecabで解析する 分割されたワードごとに、結果を表示する。 たとえば・・・ 1.txt が 愛 植尾 かきくけこ 会社 であれば 愛 植尾 カキクケコ 会社 に、1.txtが登録される 2.txt が 哀 植 尾 かきくけこ 会社 であれば 哀 植 尾 カキクケコ 会社 に、2.txtが登録さ

    pure perlで文書検索のアルゴリズムを考える - OKWAVE
  • perlで2つの配列を比較する方法について - OKWAVE

    関数型プログラムになれてれば 読めるコードですけど,Perl風味が混じってるので ちょっとしんどいですね. リファレンスを知ってるかどうかが重要です. {map{$_,1}@array2 }-> {$_} ここが何をしてるのかわかれば,大体OKかな map{$_,1}@array2 の部分では,@array2の要素を一個じつ$_1にいれて 1とペアにしています.たとえば,@array2=(a,b,c,d)だったら aを$_にして,a,1 をつくって bを$_にして,b,1をつくって・・・とやって (a,1,b1,c,1,d,1) というリストを作ります.これがmapの機能 これを { } で囲んで { (a,1,b1,c,1,d,1) } というのを作るんだけども,これは { a,1,b1,c,1,d,1 } と同じで,無名のハッシュ(ハッシュのリファレンス)を 作る.つまり {a=>1,

    perlで2つの配列を比較する方法について - OKWAVE
    kiyo_hiko
    kiyo_hiko 2012/07/13
    これいいな 使おう 「@diffs = grep {!{map {$_,1} @ys}->{$_}} @xs」 / 追記id:entry:17647281
  • livedoor Developers Blog:String::Trigram でテキストの類似度を測る - livedoor Blog(ブログ)

    こんにちは。検索グループ解析チームの nabokov7 です。 今回は、livedoor キーワードでの事例より、テキストの類似度を測るのに便利な手法を紹介します。 livedoor キーワードは、livedoor ブログでその日その日で話題になった語をランキング表示するサービスです。 当初、はてなキーワードやWikipediaを足して2で割ったようなサービスを作れといった開き直った指示のもとで開発が開始されたともいう、分社化前の芸風の名残で、キーワードの検索結果にはユーザが自由に解説を書き込める Wikipedia 的スペースもついています。 で、この解説部分に、さまざまなサイトから文章をまる写ししちゃう人がとても多いのですね。 特に多いウィキペディア日語版からの剽窃を防止するために、livedoor キーワードでは以下のような対策を講じることにしました。 ウィキペディア日語版の解説

    kiyo_hiko
    kiyo_hiko 2012/05/10
    「100文字程度の二つの文章が人の目にも明らかに似ている場合、この値は 0.4~0.5 を超えます。0.6 を超えると、細部の入れ替え以外はほぼ同一であるという感じがします」なるほど
  • 順列を求めるプログラム(Perl、Elisp)

  • Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編) - give IT a try

    2011.12.31 追記 後編を書きました。こちらもあわせてどうぞ。 Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(後編) - give IT a try はじめに 先日、FizzBuzz問題を使って社内プログラミングコンテストを開きました。 このブログでも書いた通り、なかなか興味深い結果になりましたが、一方で反省点もいくつか見つかりました。 特に問題が解けなかった人が出てしまったのは痛い誤算だったので、今回はできるだけ最後まで解けるような配慮をしてみました。 ただし、問題自体はFizzBuzz問題よりもずっと難しくしてあります。 今回もちょっと長いエントリになっていますが、よろしければ最後までお付き合いくださいませ。 前回の反省点 詳しくはこちらのエントリに書きましたが、簡単にまとめると 言語の得意・不得意が結果に大きく影響した 抜き打ちで実施したことがその

    Excel列名変換問題で第2回社内プログラミングコンテストを開催してみた(前編) - give IT a try
    kiyo_hiko
    kiyo_hiko 2011/11/14
    続・FizzBuzz。まず問1が15分ぐらい。「use List::Util qw/reduce/;$cs='XFD';print reduce{$a+26**($n++)*(ord($b)-64)}0, (reverse split //,$cs)」字数で言うとmapのsumを取ったほうが短い。問2がこれの拡張か。いけるかな?
  • #1 Multiples of 3 or 5 - Project Euler

    Published on Friday, 5th October 2001, 06:00 pm; Solved by 1023256; Difficulty rating: 5% If we list all the natural numbers below $10$ that are multiples of $3$ or $5$, we get $3, 5, 6$ and $9$. The sum of these multiples is $23$. Find the sum of all the multiples of $3$ or $5$ below $1000$.

    kiyo_hiko
    kiyo_hiko 2011/10/09
    発想は30秒でコード化に4分ぐらい。最近ループとかが理解出来ないのでループはほとんどリスト処理で書いてるな。 use List::Util qw/sum/;print sum map {!($_%5)||!($_%3)?$_:0}1..1000-1
  • 色々な言語でライフゲーム

    Squeak Perl Scheme Ruby Prolog 色々な言語でライフゲームを作ってみました。 ライフゲームについてはライフゲーム保存会 が詳しいです。また、The Game of Life ですばらしい Java アプレットを遊ぶ事が出来ます。 まず手始めに、Squeak で原型を作りました。Squeak は オブジェクト指向の元祖である Smalltalk の直系の子孫です。最近の言語はどれもオブジェクト指向の 影響を受けているので、まず Squeak で作ったら他にも移植しやすいだろうと思ったのです。 作りながら決めた仕様は以下のとおり。 盤のサイズは 20 x 20 最初ランダムなパターンが現れる 0.2秒に一度世代交代 50 回世代交代をしたらまたランダムなパターンを生成 盤のクラス名は LifeMap ただ、Squeak 版以外は手を抜いてコマンドライン実行です。全部

    kiyo_hiko
    kiyo_hiko 2010/08/26
    「Prolog です。色々なプログラム言語がありますが、 これが一番変わってます。他の言語の常識がことごとく通用しません」
  • 1