« 「佐藤雅彦全仕事」読了(1/23) | トップページ | sb、Perlのみで動作するブログ (1/25) »

2005.01.24

MeCabを使ってMemorium向けに、PukiWikiのページから名詞・形容詞を抽出し、キーワードファイルを生成するPerlスクリプト (1/24)

日記やメモ帳代わりにしているPukiWikiのページから、日本語形態素解析ソフト 「MeCab」を使ってMemorium向けに名詞・形容詞を抽出し、キーワードファイルを生成するPerlスクリプトを作ってみました。 Perl初心者なのでめちゃくちゃなコーディングはお許し下さい。でも、動くことは動きます。

  • 単にMeCabを使ってみたかっただけ。まだよく分かっていません。
  • Memorium自体の動作としては、PukiWikiから抽出したキーワードに偏りがあり、いい検索結果がでず、面白くないです。
  • 実行環境が Debian Linux 3.0(Woody)でPerlのバージョンが5.6.1と5.8以降でないため、 PerlでMemoriumのキーワードファイルのUTF8形式に変換できませんでした。シェルスクリプトで lv コマンドで一度EUCに生成されたキーワードファイルをUTF8に変換しました。
  • 「名詞」と「形容詞」をPukiWikiから抽出します。
    1/28追記:「接続詞」「副詞」も追加
  • 1/28追記:
    今後の課題:
    • 1.入力ファイルの文字コードをEUCに変換すること
    • 2.入力ファイルを引数で指定できるようにして、入力ファイル省略された場合は、既定値でPukiWikiのファイルから入力するようにする。

1.Perl、lvコマンド起動シェルスクリプト:

perl /home/hogehoge/bin/pukiwiki2memorium.pl
lv -Ou8 /home/hogehoge/public_html/tmp/MemoriumKeywords.txt.euc  >/home/hogehoge/public_html/tmp/MemoriumKeywords.txt.utf8

2.MeCabを使ったキーワード抽出Perlスクリプト(暫定版)

#!/usr/bin/perl

my $i_dir = '/home/hogehoge/public_html/pukiwiki/wiki';
my $o_dir = '/home/hogehoge/public_html/tmp';
my $o_memorium_fn = 'MemoriumKeywords.txt.euc';

# PukiWikiで更新の新しいページからキーワードを抽出
# 日付順でSORTした。
opendir(DIR,$dir) or die "$!";

while($filename=readdir(DIR) ) {
  @stat = stat $dir.'/'.$filename;
  ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdat) = localtime($stat[9]);
  $mtime=sprintf("%04d%02d%02d%02d%02d%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec);
  push(@fnames,$mtime.",".$filename);
}
closedir(DIR);

@fnames=sort{$b cmp $a}@fnames;
my @i_date_pukiwiki = split(/,/,@fnames[1]); #二番目に新しいファイルを読み込む。一番目は:Recentのため。
my $i_pukiwiki = @i_date_pukiwiki[1];


# 選択したPukiWikiのページからテキストを読み込む
my $i_pukiwiki_path = $i_dir."/".$i_pukiwiki;
open(I_PUKIWIKI,"<$i_pukiwiki_path" ) or die "$!";

my $o_memorium_path = $o_dir."/".$o_memorium_fn;
open(O_MEMO, ">$o_memorium_path" ) or die "$!";


my $i=0;

# 読み込んだテキストにMeCabを実行
while( <I_PUKIWIKI> ){
 # MeCab: Yet Another Part-of-Speech and Morphological Analyzer
 # http://chasen.org/~taku/software/mecab/
 use MeCab;
 
 my @arg = ($0, "-Ochasen");
 my $mecab = new MeCab::Tagger (\@arg);
 my @memorium_card = $mecab->parse($_);

# MeCab 品詞で処理を分ける。
# tune apps:Memorium
# http://blog.livedoor.jp/tunepolo/archives/6794946.html

$o_memorium[0] = ":某のメモ:";

 foreach my $row ( @memorium_card ) {
   my @rows = split(/\n/,$row);
   foreach my $card ( @rows ) {
     if ( $card =~  /名詞|形容詞/ ) {
       my @meisi_list = split(/\t/,$card);
       
       # Memorium のキーワードファイルの出力形式
       # Memorium Keywords - Memoriumプラグイン
       # http://www.persistent.org/memorium/hiki.cgi?Memorium%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3
       # :単語:品詞: の形式で出力

       $o_memorium[$i] = ":".$meisi_list[0].":".$meisi_list[3]."\n";
       $i=$i+1;
       }
     }
   }
}

# 重複したキーワードを削除
my %count;
@o_memorium = grep(!$count{$_}++, @o_memorium);

# EUCのMemoriumのキーワードファイルに出力
print O_MEMO @o_memorium;
close(O_MEMO);

EOF

3.生成したキーワードファイルの例:

半角英数字をMeCab(+辞書 ipadic)?が抽出できないのが痛い。

:メモ::重複:名詞-サ変接続
:ループ:名詞-一般
:比較:名詞-サ変接続
:等しい:形容詞-自立
:等しく:形容詞-自立
:小さい:形容詞-自立
:大きい:形容詞-自立
:以下:名詞-非自立-副詞可能
:以上:名詞-非自立-副詞可能
:右:名詞-一般
:大:接頭詞-名詞接続
:左:名詞-一般
:大:名詞-接尾-一般

4.動作環境

  • Debian Linux 3.0 (Woody)
  • Perl 5.6.1 (deb)
  • ipadic 2.4.4-1 (deb)
  • mecab 0.80 ... perl/ruby/python/java バインディング tar.gz からmake install;make

というわけで、今はこのPerlスクリプトをcronに登録して回しています。

■参考:

MeCab: Yet Another Part-of-Speech and Morphological Analyzer
http://chasen.org/%7Etaku/software/mecab/

MeCab は, 奈良先端科学技術大学院大学自然言語処理学講座の開発する形態素解析器 ChaSenを基に開発された高速な形態素解析器です.

tune apps:Memorium
http://blog.livedoor.jp/tunepolo/archives/6794946.html

このキーワードがMemoriumを上手に利用するための鍵だと思うので,自動(半自動)で登録するためのプログラムを作成しました.

内容はRubyスクリプトで,形態素解析のMeCabを用い,一般名詞と固有名詞だけ文章から取り出し,MemoriumのWikiで利用できるように整形して表示するものです.

Memorium:眺めるインタフェースの提案とその試作
http://www.persistent.org/memorium.html

FrontPage - PukiWiki.org
http://pukiwiki.org/

Perlメモ
http://www.din.or.jp/~ohzaki/perl.htm#ArrayUnique

配列から重複した要素を取り除く

@IT:Unicodeのテキストファイルをほかの文字コードに変換するには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/448cnvunicode.html





|

« 「佐藤雅彦全仕事」読了(1/23) | トップページ | sb、Perlのみで動作するブログ (1/25) »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/49099/2686323

この記事へのトラックバック一覧です: MeCabを使ってMemorium向けに、PukiWikiのページから名詞・形容詞を抽出し、キーワードファイルを生成するPerlスクリプト (1/24):

» MeCabを使ってMemorium向けに、PukiWikiのページから名詞・形容詞を抽出し、キーワードファイルを生成するPerlスクリプトを「改版」(1/28) [雑木林とコンピュータ]
MeCabを使ってMemorium向けに、PukiWikiのページから名詞・形 [続きを読む]

受信: 2005.01.28 19:43

« 「佐藤雅彦全仕事」読了(1/23) | トップページ | sb、Perlのみで動作するブログ (1/25) »