ラベル プログラム の投稿を表示しています。 すべての投稿を表示
ラベル プログラム の投稿を表示しています。 すべての投稿を表示

2009/09/17

Levenshtein距離って長さの影響受けすぎてかわいそうな気がする

Levenshtein距離を測る時に、単語長が長くなると、場合によっては文字列長い方が不利じゃない?ってことで、id:naoyaさんのプログラムを拝借して文字の長さの影響を軽減させてみた。

あ、ただ単純に単語1と単語2の長さのルートをとってかけたものでLevenshtein距離を割っているだけです。

これが妥当かどうかは・・どうなんだろう・・ちょっと比較してみる必要があるかもしれないですね・・。

あと、日本語の場合lengthがbyte計算になっていることにも注意。。

#!/hogehoge/perl -w

use strict;
use List::Util qw/min/;
use Params::Validate qw/validate_pos/;

open(IN,'./mogo.tsv');

while(){
    my($name1,$name2) = split('\t',$_);
    my $distance = &levenshtein($name1,$name2);
    my $l1 = length($name1);
    my $l2 = length($name2);
    my $sim = $distance/(sqrt($name1)*sqrt($name2));
    print $name1."\t".$name2."\t".$sim."\n";
}

sub levenshtein{
    my ($s1, $s2) = validate_pos(@_, 1, 1);
    my $m = [];
    
    my @s1 = split(//, $s1);
    my @s2 = split(//, $s2);

    for(my $i = 0; $i <= @s1; $i++){
         $m->[$i]->[0] = $i;
    }

    for(my $j = 0; $j <= @s2; $j++){
         $m->[0]->[$j] = $j;
    }

    for(my $i = 1; $i <= @s1; $i++){
         for(my $j = 1; $j <= @s2; $j++){
              my $diff = ($s1[$i-1] eq $s2[$j-1]) ? 0:1;
              
              #置換、挿入、削除のうち、一番低コストで一致可能なものを選択
        $m->[$i]->[$j] = min(
                    $m->[$i-1]->[$j-1] + $diff,    #置換
                    $m->[$i-1]->[$j] + 1,          #挿入
                    $m->[$i]->[$j-1] + 1           #削除
                   );
         }
    }

    return $m->[-1]->[-1];
}


2009/07/05

あなたなら、どうする・・

周りで変な事が起こる確率が高い気がする。。

またしょーもない話題だが、思い出したので書いてしまう。



ある日帰宅して窓を開けると、ベランダに女性物の下着が。上の階の住人の下着が落ちてきたらしく、それがあろうことか自分の部屋のベランダに入ってしまったようなのです。どういう放物線を描けばうちのベランダに入るんだ。。と思いつつも、はて・・これはどうしたものか・・と、少し困ってしまいました。

みなさん、こういう時ってどうします?

物が物だけに、下手な事をしたら自分が何か疑われそうで、あー、めんどくせー(´Å`)=3ってなった。

考えられる選択肢は挙げ出したらキリがない。

[1]鷲掴みにして上階へ駆け上がり、インターフォンをならして元気よく「ブラジャー落ちてましたよ!!」っ言う。
→元気だなー。本当に何にも考えない人間ならこれ最強。もしこれを選択するのなら、超わんぱくな自分を演じなければならない。

[2]鷲掴みにして上階へ駆け上がり、ドアノブにかけておく。
→ガキのイタズラか。

[3]袋に入れて上階へ駆け上がり、インターフォンをならして普通に「落ちてましたよ。」と言う。
→「ちゃんと洗って返しました」みたいで逆に気色悪い。

[4]袋に入れて上階へ駆け上がり、ドアノブにかけておく。
→「ちゃんと洗って返しました」みたいで逆に気色悪いパート2&「見ず知らずの人間が自分のブラジャーを持って水際まで現れたという恐怖」を感じさせてしまう恐れあり。

[5]ベランダに放置する
→我が家のベランダに根付いてどうする。ベランダで育てるな。

[6]室内に放置する
→置いておきたくない。友人が来てブラジャー置いてあったらどうするよ。え?どうするよ。

[7]焼却処分
→いや、人の物を勝手に捨てるのは。。

[8]鷲掴みにして駅前まで走り、交番に届ける
→交番に辿り着く前に逮捕されるかも。しかも持ち主の検討が大体着いてる場合って・・。

[9]袋に入れて駅前まで走り、交番に届ける
→交番に辿り着いてから逮捕されるかも。

[10]我が家以外のテリトリーに落としておく(敷地の地面に直接・・とか)
→んー、何か良心に反する。
それに、物理的にあり得ない位置に落として置くわけにもいかないし、風向きとか考慮してブラジャーの自然落下を物理シュミレーションするのめんどくさい。シュミレーションうまくいったら結局自分のベランダの中なわけだし。データねつ造とかしたくないし。

[11]ポストに入れる
→これにしました。何かクッションか何かのカバーみたいなのが一緒に落ちてきていたので、それにくるんで突っ込みました。ポストに行くまでの間に人に会わないように、タイミングを見計らって慎重に・・。



面白いアイデアや、天才的な頭脳プレーがあったら教えてください。また、女性だったら実際こういう事があったらどうしてほしいんですかね?今後の参考のために、教えてほしいです。



2009/06/30

品が品だったら最悪な件/数学的に18禁グッズと判定

おはようございます、Japan。
下書きのまま本当にどーでもいい記事がいくつか蓄積されていたので、古いのから消化してみます。別に在庫をストックしてる訳じゃないですけど。このブログ、適当に書きすぎて全然ハードル上がってない。。よって、気軽に書きすぎて1記事5分位で低品質記事を大量生産・・それが更なる大量投稿につながる・・と。ひどい。少しは考えて書くべきか。

---

えーっと、突然ですが、自分の名前をGoogleとかで検索すると、後ろの方に自分と同姓同名の人のAmazonの「ほしいものリスト」が出てきます。

友人から、「何かno-daemonと同性同名の人悪趣味だよ。」っていう連絡をもらって調べてみたんだけど、自分と同性同名の人がいかにもオタクっぽいものを欲しがってました。

これは・・全国の自分と同姓同名の方はみんな不利益を被ってる可能性があるということか。まぁオタク的なものならまだしも(それも嫌だけど)、大人のなんちゃら的なグッズとかが「ほしいものリスト」にずらーって並んでたらさすがにちょっと厳しいな・・(・ω・`)自分じゃないのに。。と。

あぁ、どうでもいいけどそういうの想像すると何かやだなー(笑)何とかしてくださいよ、同じ名前の人wっていうかこれ以上よく分からん物を欲するんじゃないぞ!(笑)同姓同名の人、STOP物欲!

あぁいうのって、Amazon的には何とかならないのかな?そもそも名前表示しちゃうのってどうかと思いますね。昔からあれは問題だと思ってたんですよね。。自分も一時期公開していたことがあったんだけど、意外と見てる人いるんだよね。「〜っていう本もう読んだの?」とかいきなり聞かれてびっくりしたり。。何回かそんな事があって、案外名前って調べられてるんだな・・と思って公開するのを止めました。そうしたらこの様ですよw

自分と違う同姓同名に間違えられる位だったらその同性同名の人と判別させるためにもあえて公開した方が良いかもしれないですね(笑)

ちょっと話は違うけど、某氏と数年前に、

某氏:「Amazonでコンドーム買ったら、レコメンデーション機能でずらーっと関連商品が並んでて人前で自分のアカウントでAmazon開けなくなった(´・ω・`)」

no-daemon:「あぁ、この前の合コンの娘と付き合い始めてそれで使うとかリアルなんで止めてください。」

とかいうやりとりがあったけど、数学的に「こういうのいつも買ってる人ですね、コンニチハ!!」って判断されるのって、何か論理的に決定づけられたみたいで嫌ですね。最近はどうなのかな?その類は出てこないようになったのかなー?

誰か、18禁っぽいグッズを大量に買い占めてみて、結果を報告してください。

数学的にあなたの欲しがっているものが、18禁グッズと判定されるか否か。

2009/06/07

iPod touchからサーバにアクセスしてプログラミングするアホ

iPod touchからsshで学校のサーバにアクセスして、プログラミングしてみました。アホそのものなので、マネしない方が良いです。

使ったのはTouch Termというソフト。どんなシーンで使う事を想定して作られているんだろう・・?PC持ってないときにサーバ上で大変な事が起きて、緊急対応をしなければいけない時とかでしょうか・・。もしくは、「処理終わったかなー?」とかいう時にちらっと覗く時とか・・?



外観はMacのTerminalみたいな感じですね。
サーバを指定してssh接続すると、パスワードを聞かれて、



タッチすると入力用のキーボードが出てきます。



linuxコマンド打つ時はちゃんとtab補完とかもできて、そこそこ打ちやすいです。
emacsを開いて・・




これもタッチするとキーボードが出てきます。Ctrlキーとかも後ろの方に薄ーくでているので、この部分を押して使う事ができます。


うん、使いにくい!

でもiPod touch上でコマンド操作するという事を考えると、ものすごく良く考えられたインターフェースかもしれません。これ・・作者はきっと本気です(笑)


2009/05/29

最短経路の本〜レナのふしぎな数学の旅〜



グラフ構造を成している某知識源を使ってごにょごにょやる時に、最短経路を求める必要がでてきたので、最短経路問題を解くダイクストラアルゴリズムとかを使い始めています。

そのまま実装すれば良いのですが、以前から少し気になっていたこの本を読んで、この分野に関する理解を深めています。

これ、相当読みやすいです。まぁ・・アルゴリズムの本を読んだ事がある人は、そちらで十分かも。


「数学ガール」的な感じで(というか数学ガールがこれを真似して(略))、対話形式で進んで行きます。ものすごく回りくどいような気もするのですが、抽象から具体を想像できる頭の良い人はいざ知らず、自分のような具体→抽象の人間にとっては、これが「最短経路」のような気もします。



2009/05/26

Tracインストール本番

前回[TracインストールしようとしてPython周りでごにょごにょした件]に引き続き、Tracのインストール。本体のインストールということで、本番です。

インタアクト株式会社さんというところが、Tracの日本語版を提供してくれているようです。
ということで、使わせていただきます!

$wget http://www.i-act.co.jp/project/products/downloads/Trac-0.11.4.ja1.zip
$unzip Trac-0.11.4.ja1.zip
$cd Trac-0.11.4.ja1
$ python ./setup.py install

$trac-admin help
ほげほげほげー


なんだかあっさりとうまくいったみたいです。
次はSubversionとの連携ですね。

2009/03/31

Collective Intelligence in Action

「集合知インアクション」という技術書を読んでます。



今まで色々考えてきたりプログラミングで実装してきたりしたことを、ごっそり本にまとめられた感じがして、少し歯がゆいです(´ω`;)


要するに、世界中の人によって作られたWeb上に溢れかえっている知識である「集合知」をどうにかうまく活用して、数学を使ったり使わなかったりしながら煮たり焼いたり時には生で食べたりしながら楽しい情報を提供できるか・・ということです。

有名な例で言うと、Amazonには、購入履歴をうまく利用して新たにおすすめの商品を推薦する「レコメンデーション」の機能があります。裏で動く数学的アルゴリズムの楽しさ。数学が役に立ってる!というのを実感できます。たまらない・・・ふふふ(´∀`)


「こんなの作った!」というのが世の中に認められると、楽しげな分野です。

2008/09/10

バイトの方が大学よりも研究っぽくなってきている件

研究関連で、来週再来週は発表×2本。両方とも結構気軽な発表なのですが、実は学外で発表するの今回で初めてなんですよね。理系の学生としてどうなのか。。学部の時何やってたの?みたいな感じですね。



ところで、自分の研究室の皆さんはなんだかみんなものすごく数学ができるので、


数学を使っていない=研究をしていない



・・みたいに感じてしまい、勝手に自己否定し始めてしまいます。

何だかひたすらシステム作りをしている・・・というか。数学が伴わないアイデアだけのプログラミングなんて、一発屋じゃないか・・とか思ってしまうわけです。まぁ、アイデアを形にするのが楽しいんですけどね。


自分としては楽しいんですが、研究室的にどうなのかと思って

「これ研究になってます?もっと数学的な事をやった方が良いですかね・・?」みたいなことを教授に言ったら、

「いいんじゃないですかー。この研究室数学とてつもなく得意な人がいるけど気にする事はないですよ。」

と言ってくれ、ちょっと安心しますた。まぁまだ土台作りなので、今後もっと数学的に深めていく予定ですけどね。




一方バイトでは勝手に数学使いまくってます。確率的な処理とかをしたりして、ブログを分類したりしているのですが、なんだかこっちの方がよっぽど研究っぽく見える気がします。



ま、なんだか両方楽しいですよ。来週辺りにはググれば論文がでてくるようになると思います。

インターネットに興味があれば誰でも理解できるような平易な内容なので、興味がある人は読んでみてちょ。論文っていうよりマッシュアップのアイデア公開みたいな感じです。「こんなの作ったー。」みたいな雑誌記事みたいな論文。


あぁ、この分野の学生でよかった。ゆるい研究もがっちりした研究も、両方に立場がある(´∀`)

2008/08/30

Lightweight language futureへ行ってくる

Lightweight Language Futureというgeekの集まりに、id:big-eyed-hamsterと共に参戦してきます。

彼は比較的カーネルハッカー寄り及びハードウェア萌えの方なので、自分がやってるような軽いアプリケーション関連にも引きずり込もうっていう魂胆です(嘘)。


Perlプログラマとしての一番の目玉はLarry Wallさん来日・・・ですかね。Perlプログラマとしては一度お目にかかりたいと思っていたので。あと、Rubyの作者のまつもとさんも来ますし、司会はPythonの有名な本を書いた柴田さんだったりと、lightweight languageの重鎮たちが一同に会する・・・といった集まりになっております。


ちなみに1000人位来るらしいです。

geekが。

バイト先の方々もたくさん来そうです。この前YAPCというPerlのカンファレンスの動画を見ていたら、発表者の中にも聴衆の中にも見たことがある方が何人も見受けられました。


あと、大学の人とか同じ位の年の人がこういう場所で発表している動画とかを見ると、頭角を現している方々との差を感じますな。まぁ自分はちょっと違う路線でいくつもりなので比較して落ち込む必要もないのですが、刺激を受けます。