« 2008年10月 | メイン | 2008年12月 »

2008年11月28日

[POPFile]解決したと思いたいけどどうなんだろう。。

CentOS
前回,以下のエラー内容
>Use of uninitialized value in hash element at Classifier/Bayes.pm line 2169,  line 7.
が出るので,sqliteとDBD::SQLiteのバージョンの違いが原因で動かないのでは?ということで,
DBD::SQLite2 と sqlite2 の組み合わせを試してみた。
SQLite3をアンインストールしてSQLite2を入れ直し,試してみるも解決せず。

次に,11/12にリリース候補版 POPFile ver1.1.0(RC6) がリリースされたということで試す。
候補版ではありますが,RC0からのRC6で正式版リリース前の最後の候補版らしいのでまぁ大丈夫かな,と。
こっちはデフォルトデータベースがSQLite3とのことで,SQLite3を入れ直す。
(sqlite2のままで自動変換してくれるらしいから大丈夫みたいだけど)
それでも解決せず。

色々なPerlモジュールやPOPFileを入れ直してみると,エラー内容に変化が。
>DBD::SQLite2::db selectrow_arrayref failed: no such table:
 history(1) at dbdimp.c line 412 at POPFile/History.pm line 1026.
>Can't use an undefined value as an ARRAY reference at POPFile/History.pm line 1026.
データベースのことで文句が出ているので,データベースのあたりをチェックすることに。
popfile.dbが壊れているのかと思い,コーパスの破損を見ながら試してみた。
$sqlite3 popfile.db
'SQLite version 3.3.6'
Enter ".help" for instructions
sqlite>pragma integrity_check;
error: file is encrypted or is not a databace
sqlite>
エラーが出たので popfile.db を消去し,popfileを再起動すると,きちんと動いた。
今のところ,分類も問題なく学習されてる。送受信時も分類時もエラー無し。
結局原因は分からないけど,モジュールとpopfile.dbの破損が原因?
長時間起動してると未だに
>Use of uninitialized value 〜
が表示されるが,とりあえず放置。。。


Macbook
ソースをいじってheaderを書き換える実験を。
 以前:x-text-classification : unclassified
 現在:x-text-classification[1] : unclassified
上書きされるならこれで[1][2]として区別できるし,
全部ダブルで表示されるなら二つめのPOPFileで余分なheader部分を書かないようにしてあげれば良さげ?
2008年11月27日

[SQLite] Cent0SでのSQLiteインストールとアンインストール

▼SQLiteインストール
SQLite3.3.6 ダウンロード
http://www.sqlite.org/sqlite-3.6.6.tar.gz

展開,makeなど
$tar zxvf sqlite-3.3.6.tar.gz
$mkdir bld
$cd bld
$../sqlite-3.3.12/configure
$make

で,インストール完了。


▼SQLiteアンインストール
SQLiteがある場所を確認
>$which sqlite
/usr/local/bin/sqlite

/usr/local/bin/sqlite に行き,sqliteをゴミ箱へ。
これでアンインストール完了。

2008年11月20日

[POPFile]_元凶はSQLite3??

mecabのエラーはコンパイルミスが原因らしく,
アンインストール後,再インストールするとエラー文が出なくなりました。

テストとして,メーラーで送受信を行ってみると,無事に送受信できる。
が,受信時に以下のエラーがログとして表示される。

>Use of uninitialized value in hash element at Classifier/Bayes.pm line 2169, line 7.

POPFileのUIにアクセスして,バケツを再分類したときも同じエラー文が出る。
更に,どんなにトレーニングを積んでも unclassified のままで,分類されない。

調べてみたら,モジュール等のバージョンのせいかもしれません
(バージョンを調べてみると,sqlite3.3.6 + DBD::SQLite2 の組み合わせだった)

>SQLite バージョン 2 と バージョン 3 のデータベースを Perl 環境から使用するためには、
>DBD::SQLite2 をインストールしてバージョン 2 のデータベースを扱い、
>DBD::SQLite 1.xx でバージョン 3 のデータベースを扱うようにしなくてはいけません。

CPANでDBD::SQLiteをインストールすると,自動的に最新のSQLite3が入るそうです。
公式では,SQLite3非推奨だったので,アンインストールしてSQLite2を入れ直そう。
楽だからと言って,CPANを多用するのも問題ですねぇ。

2008年11月11日

POPFileをサーバで動かす

過程:
サーバにPOPFileをインストール。
実行時に110ポートは既に使われているから実行できないとエラーが出たので,
新しいポートに設定し実行。
最終的に,macbookで管理したいので,サーバのUIをmacから開けるように設定。

問題:
サーバにあるメールを受信しようとするも,ダウンロード途中で止まる。


-----------------------------------------
以下,backgroundで動かす方法

POPFileがあるディレクトリに移動し,
$perl popfile.pl (※実行)
POPFile Engineがrunningしたよと言われたら,OK。
ここで,Ctr+C(プロセス終了コマンド)を叩くとPOPFileがstopしてしまうので,
Ctr+Z(プロセス一時停止コマンド)を押す。

POPFileは常に実行され続ける類いだから,通常はstopさせるまでは次の作業に移れない。
新規ウィンドウを開いて作業する手もあるけれど,何枚も開きっぱなしにしてるなんて何か嫌だし。
そう言う時に,プロセスを停止せずに次に移りたい時にはバックグラウンドで動かすという方法がある。
$bg (※back groundへ移動)
これで,POPFileはバックグラウンドで動き続け,別の作業を平行して行えるようになった。


で,動いているかどうかを確認したい時は
$ps aux | grep popfile
とか,
$jobs (※バックグラウンドプロセスの一覧表示)
とかで確認してみる。


更に,バックグラウンド(裏)で動いているプロセスを,フォアグラウンド(表)へ移す場合は,
$ fg
を叩けばOK。

で,そのプロセスを終了したければ,Ctr+Cを叩いてstopしてやれば良し。

cf.
バックグラウンドで動かすコマンド「&」
$ perl popfile.pl &
これで,自動的にPOPFileが裏で動き続けることになる。
2008年11月07日

Text::Kakasiインストールエラー

Text::Kakasiが必要と言われたのでインストールしようとしたところ,makeで失敗。
何やら「libkakasi.h」が無いとかさわいでるー。

ネットで調べたら,先にkakasiのインストールが必要みたいなことが書いてある。
本家を見てみると,Text::KakasiはkakasiをPerlから利用する為の拡張モジュールだそうで。
そりゃkakasiが無けりゃあ動かないですよね。
という訳で,先にkakasiをインストール(参考:http://www.makizou.com/archives/1254)して一件落着。
ちーん。

Perlモジュールのインストール時にmakeエラーがきたとき

普通cpanを利用してPerlモジュールをインストールするときは,
 CPAN> install モジュール名
でいいんだけど,途中makeで失敗する時がある。
解決策候補を忘れないうちにメモ。

▼解決策①
CPANが駄目な時は手動でやる方法もあって,(ex.DBI)
 $ wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.607.tar.gz
 $ tar xvfz DBI-1.607.tar.gz
 $ cd DBI-1.607
 $ perl Makefile.PL
 $ make
 $ make test
 $ make install
って順にやってけばいいんだけど,CPAN同様makeで失敗。
そんなときは
 $ make config
としてやってから,makeするとうまく行く場合がある。


▼解決策②
エラー内容が以下のような感じの時。
make: *** [pure_site_install] Error 13
/usr/bin/make install -- NOT OK
これは,一般のユーザーでインストールするとこんな風になる模様。
そんなときは
$ sudo cpan
と打って,スーパーユーザーでcpanに入ってあげてから
cpan> install モジュール名
ってやってやるとうまくインストールできる。

2008年11月05日

メールサーバ構築

送信メールサーバーにはPostfix、受信メールサーバーにはDovecotを採用し,メールサーバを構築。
基本的に,ここ(http://centossrv.com/postfix.shtml)を見ながら進めて行く。

途中で,ポンさんにWebadminを紹介してもらった!
viに精通できていない私には,webからGUIでサーバの設定ができるので超便利。
一括して設定を把握できるのがいいですね。ありがとうございました!

やったこと
・Postfixのインストール,設定,起動
・Dovecotのインストール,設定,起動
・thunderbirdのインストール@yum,設定
・メール送受信テスト

今後は,
POPFile をメールサーバ側で運用する1つの方法
クロスプラットフォーム版のインストール方法
を参考にlinuxにPOPFileを入れていく。

現在必要なPerlモジュールをひたすらインストール中。。。