Meadowのshell-command(M-!)

いままで

M-x shell

と打って、シェルで作業してたのだけど

M-! command

で直接コマンドを実行できることが分かった。この差は結構でかかった。

MeadowでPythonの対話型シェルを使う

Meadowいじってて、補完機能使ってたら偶然見つけた。

M-x run-python

meadow_python

Meadowからpython使えると便利。

psvnのコミットの仕方忘れてたのでメモ

emacs/Meadow用subversionインターフェースの使い方忘れてる。

ので、メモしておく

M-x svn-status
m # コミットしたいファイルをマーク
c # コミット
# コメント入力
C-c C-c

こんな感じ

納豆が売ってない、そして高すぎ

週末は大体家族で買い物に出かける。昨日も近くのスーパーに買い物に出かけたわけだが、いつもは普通に88円とか98円とかで売っている納豆がやたら高い(128円)。

しかも、品揃えが少ない

といった状況に違和感を覚え、昨日は納豆を買わずに帰ってきた。今日も出かけたついでに別のスーパーを覗いたのだけど、

納豆がない、一個も!!

もげーーなんじゃこりゃーーってことで帰ってきてググッたら、

どうやらあるある効果らしい。

おそるべし、あるある、、、煽る煽る大辞典か。

この後は普通に納豆関連銘柄を調べておく。株知識のストックは重要。

納豆関連株!旭松食品、篠崎屋!?|株のお姉さんの「株の教則」

四季報で調べたら、旭松食品2911というのが納豆主力の企業。篠崎屋2926もそうかしら。まだ、動いていないけど注目かも

ほう、なるほど。

結城浩さんが新しいJava本を出すらしい

そういえば、去年の今頃も結城浩さんのJavaのデザパタ本読んでたなぁ。

ProductName 増補改訂版Java言語で学ぶデザインパターン入門
結城 浩
ソフトバンククリエイティブ / 3990円 ( 2004-06-19 )


で、今度はリファクタリングの本を出すそうです。

『Java言語で学ぶリファクタリング入門』

きれいなソースは読むのが楽で、修正するのが楽で、デバッグするのが楽です。これに対して、きたないソースはすべてが大変です。ではどうすれば「きれいなソース」になるのでしょう。きたないソースをどうすれば(新たなバグを出さずに)きれいなソースにできるのでしょう。それに対する試みの1つが「リファクタリング」です。

本書『Java言語で学ぶリファクタリング入門』では、 Java言語を使って、リファクタリングの本質をていねいに解説します。

かなり欲しげ。というわけで、書籍プレゼント企画に応募した。

Lingua::JA::Summarizeの特徴語をHyper Estraierで検索

Lingua::JA::Summarizeで特徴語を抽出して、Hyper Estraierblosxomのデータを検索するということをやってみた。

抽出された語彙は単にOR検索しているので、精度があんまよくない。

use strict;
use warnings;
use Estraier;
use Lingua::JA::Summarize;

my $entry = << '__DDD__';
文章をここへ
__DDD__

my $s = Lingua::JA::Summarize->new;
$s->analyze($entry);
my @keywords = $s->keywords({ minwords => 3, maxwords => 5});

my $query_keywords = join(" OR ", @keywords);

print $query_keywords;

my $db = new Database();

# open the database
unless($db->open("/usr/local/blosxom/casket", Database::DBREADER)){
  printf("error: %s\n", $db->err_msg($db->error()));
  exit;
}

my $cond = new Condition();
$cond->set_phrase($query_keywords);
$cond->set_max(5);
$cond->add_attr('@uri ISTREW .txt');

my $result = $db->search($cond);

my $dnum = $result->doc_num();
foreach my $i (0..$dnum-1){
  my $doc = $db->get_doc($result->get_doc_id($i), 0);
  next unless(defined($doc));
  my $uri = $doc->attr('@uri');
  printf("URI: %s\n", $uri) if defined($uri);
  my $title = $doc->attr('@title');
  printf("Title: %s\n", $title) if defined($title);
  # display the body text
#  my $texts = $doc->texts();
#  foreach my $text (@$texts){
#    printf("%s\n", $text);
#  }
}

unless($db->close()){
  printf("error: %s\n", $db->err_msg($db->error()));
}

文書の類似性検索だったら文書をHyper Estraierに登録してから、類似度検索をかければいいのかも。estseek.cgiのsimilar検索みたいのがやりたいんだけど。Hyper Estraierのドキュメントをちゃんと読まねば。

追記 07.01.13

類似性検索できるようにしてみた。

Lingua::JA::Summarizeの特徴語に重みをつけて文書検索

Lingua::JA::Summarizeの特徴語をHyper Estraierで検索 できるようにしたんだけど、特徴語を単にOR検索しているだけなので、精度がよくない。それが気に入らないので類似性検索までできるようにしてみた。

Hyper Estraierの類似性検索の仕組み

User's Guide of Hyper Estraier Version 1 (Japanese)

estseek.cgiの場合、「[similar]」というリンクを選択すると類似検索を行うことができます。

[SIMILAR] WITH 重み 語彙 WITH 重み 語彙 ...

という構文で類似性検索をする。さらに、類似性評価に関しても触れている。

User's Guide of Hyper Estraier Version 1 (Japanese)

類似度はベクトル空間モデルという考え方に基づいて算出されます。文書からキーワードを取り出してベクトルとして表現し、ベクトル同士のなす角の余弦を類似度とするものです。

余弦を類似度ってことはユークリッド距離でなくてコサイン距離を測ってるってことだな。つまり、プロファイル(波)の形の類似性を評価してるんだよね。図はOOoのCalcで(not Excel)。

profile

例えば、文書1と文書2は類似性が高い(とういか同一)だ。また、文書4のように一定の重みを均等に載せて直線としてプロファイルを定義してやっても、文書3みたいなOR検索でヒットしてしまうノイズは結構除ける。

[SIMILAR] WITH 10000 catalyst WITH 10000 plugin WITH \
10000 tagcloud WITH 10000 markdown

実際にsimilar_entryプラグインを上記のような検索式に変更したら、かなり精度が上がった気がする。重みが10000ってのはblosxomのestseek.cgiの類似性検索の重みを眺めて適当に決めた。

Lingua::JA::Summarizeから語彙の重みを取り出す

重みを10000とかに決めうちしてしまっても結構使えそうなことはわかったんだけど、どうせならLingua::JA::Summarizeから重みを決定したい。

ドキュメント読んでみたら、statsっていうメソッドで統計的なデータが求められるらしい。statsメソッドは、こんな感じでハッシュで返ってくる。

$VAR1 = {
          'r' => {
                   'cost' => 2000,
                   'count' => 1,
                   'weight' => '5.55555555555556'
                 },
          'forest' => {
                        'cost' => 2000,
                        'count' => 3,
                        'weight' => '55.5555555555556'
                      },
          'バギング' => {
                              'cost' => 2000,
                              'count' => 1,
                              'weight' => '11.1111111111111'
                        },

cost*weightを利用すればよいような感じだけど、これはTFIDFの意味合いでよいのだろうか?
たつをの ChangeLogとか、奥 一穂のお仕事ブログをよく読んでみると、それっぽくは使えるようだ。コメント欄など参考になった。

CRFはMecabのサイトから論文たどれる。

以下、参考資料

Lingua::JA::Summarizeの抽出語彙に重みをつけてHyper Estraierで類似性検索をする

Hyper EstraierもLingua::JA::Summarizeも大体解決したので後は実装するだけ。といっても以前作ったコードにちょっと手を加えrるだけ。重みを10で割ってるのは意味ない(気持ち的にそうしたかっただけ)

  my @keywords = $s->keywords({ minwords => 3, maxwords => 16});
  my $stat = $s->stats();
  my $query_keywords = "[SIMILAR] " . \
    join(" ", map "WITH " . \ 
    int($stat->{$_}->{cost} * $stat->{$_}->{weight}/10) .  \
    " $_", @keywords);

こんな感じでEstraier用のクエリを構築してあとはAPIつかって検索するだけ。blosxomのsimilar_entryプラグインはこれで検索結果を表示するようにした。


以下、メモ。

Rで並列計算

Rで並列計算 - RjpWiki

Rで並列計算

(とりあえず、動いたので報告です。256ノードで動かすと、さすがに速いです。修正大歓迎。)

snowパッケージを用いてクラスターマシン上で並列計算を行う。

Rで並列計算できるらしい。

早速試したいが、いま自由にできるまとまったクラスターがないのでまた後で。

でも、PCAとか速くなると嬉しい。

MSYSでベンチマーク

linuxで実行時間の計測に使うtimeコマンドがDOS窓だと、

>time test.exe
入力された時刻は受け付けられません。
新しい時刻を入力してください:

とまぁ時刻入力になってしまい、ムキーとなるわけだが、MSYSのシェルからだとちゃんと実行される

$ time test.exe

real    0m0.046s
user    0m0.061s
sys     0m0.000s

ということに気付いた。

livedoor Readerに完全移行した

夏過ぎからずっとbloglinesと併用していたのだけど、 livedoor Readerに完全に乗り換えた。クリップしやすいのとサクサク読めるので。

でもSBSは相変わらず、del.icio.usだ。

アイコンがあるから、お気軽感が強いのかナァ。てかあの場所は目につくからブックマークレットに比べて分かりやすい。

icon

livedoor クリップにもこういう拡張機能用意されんかな。

と思ったが、SBSは既読未読考えなくてよいから、単にdel.icio.usと同期するようにすればいいのかな。