Hatena::Groupstudyroom

文::字

2011-01-08

[] ゴミメモ 19:01  ゴミメモ - 文::字 を含むブックマーク

ちょっと Perl 書く機会があったのではじめて知ったことメモ。

例外のハンドリング

eval と $@ を使う方法がメジャーらしい。eval ブロックが try で if($@) 以降が catch みたいな感じ。eval {}; の ';' をよく忘れる。

eval {
    die 'something wrong happened.';
};
if($@) {
    print "Error: $@";
}

die だと別モジュールのエラーが起きた行数を正しく記録してくれないことがあるので、別モジュールの中で例外を発生させるためには Carp モジュールの croak とかを使う。

参考:

0e0

boolean コンテクストでは true として評価されるけど、数値としては 0 を表す 0e0 という値がある。DBI を使ってて知った、SQL を実行した結果件数が 0 のときは 0e0、レコード数が不明##場合には -1 が返ってくる。

オブジェクト指向の基礎

package と bless を使ってオブジェクト指向っぽいプログラミングをする。

package Main;
use strict;

my $log = Logger->new();
my $flg = int(rand(2));
my $parser = Parser->new($flg, $log);
$parser->parse('sample text');

package Parser;
use strict;

sub new {
    my ($self, $flg, $log) = @_;
    my ($hash) = {
        'flg' => $flg,
        'log' => $log
    };
    bless $hash, $self;
}

sub parse {
    my ($self, $text) = @_;
    $self->{log}->log("parsing $text, flag: $self->{flg}");
}

package Logger;
use strict;

sub new {
    my $self = shift @_;
    bless {}, $self;
}
sub log {
    my ($self, $text) = @_;
    print $text;

2007-12-18

[][]Debian SargeにMeCabとText::MeCab(Perlモジュール)をインストール 20:47 Debian SargeにMeCabとText::MeCab(Perlモジュール)をインストール - 文::字 を含むブックマーク

apt-get install mecab
apt-get install libmecab-dev
cpan install Text::MeCab

apt-getでmecabインストールしたあとに、cpanシェルでText::MeCabインストールしようとすると、mecab-configというコマンドが見つからなくて中止になってしまう。

いろいろ調べたんだけど、Debianの場合MeCabパッケージ本体にはmecab-configが含まれておらず、libmecab-devに入っているようだ(参照:no title)。

apt-getでlibmecab-devを入れたら無事にmecab-configコマンドがインストールされた。

そのあとcpanシェルでinstall Text::MeCabしたら無事にインストール終了。

[][]MeCabを使ってみる 21:06 MeCabを使ってみる - 文::字 を含むブックマーク

Text::MeCabは導入が楽に出ているプログラムのテキストを変えて動かしてみただけ。

リスト:

#! /usr/bin/perl
use Text::MeCab;
my $m = Text::MeCab->new();
my $str_euc = "何の幸せの人格についてなら11回分だろう、君は冷凍庫のトラックは既に文章の犬。";
my $n = $m->parse($str_euc);
while ($n = $n->next) {
    printf("%s\t%s\t%d\n",
           $n->surface,
           $n->feature,
           $n->cost
           );
}

出力結果:

何の    連体詞,*,*,*,何の,なんの,代表表記:何の  4108
幸せ    形容詞,*,ナ形容詞,語幹,幸せだ,しあわせ,代表表記:幸せだ  11380
の      助詞,接続助詞,*,*,の,の,*       18649
人格    名詞,普通名詞,*,*,人格,じんかく,代表表記:人格   23766
に      助詞,格助詞,*,*,に,に,* 27984
ついて  動詞,*,子音動詞カ行,タ系連用テ形,つく,ついて,代表表記:就く      32369
なら    助詞,接続助詞,*,*,なら,なら,*   36676
11      名詞,数詞,*,*,*,*,*     49399
回      接尾辞,名詞性名詞助数辞,*,*,回,かい,*   51748
分      接尾辞,名詞性名詞助数辞,*,*,分,ふん,*   56084
だろう  判定詞,*,判定詞,ダ列基本推量形,だ,だろう,*      62377
、      特殊,読点,*,*,、,、,*   56835
君      名詞,普通名詞,*,*,君,きみ,漢字読み:訓 代表表記:君       64844
は      助詞,副助詞,*,*,は,は,* 66819
冷凍    名詞,サ変名詞,*,*,冷凍,れいとう,代表表記:冷凍   73760
庫      名詞,普通名詞,*,*,庫,こ,漢字読み:音 代表表記:庫 80307
の      助詞,接続助詞,*,*,の,の,*       83274
トラック        名詞,普通名詞,*,*,トラック,とらっく,代表表記:トラック   89267
は      助詞,副助詞,*,*,は,は,* 91242
既に    副詞,*,*,*,既に,すでに,代表表記:既に    96904
文章    名詞,普通名詞,*,*,文章,ぶんしょう,代表表記:文章 104661
の      助詞,接続助詞,*,*,の,の,*       107628
犬      名詞,普通名詞,*,*,犬,いぬ,漢字読み:訓 代表表記:犬       112763
。      特殊,句点,*,*,。,。,*   109395
        BOS/EOS,*,*,*,*,*,*     109179

2007-12-17

[][]Windows VistaでPerl+MeCabを使う 22:05 Windows VistaでPerl+MeCabを使う - 文::字 を含むブックマーク

Mecab本体のインストール

Text-Mecabのインストール