« Eclipse 3.0.1、Debian 3.0 (Woody)で動かず。ムキー。(1/27) | トップページ | ココログにGoogleのサイト内検索機能を追加 (1/28) »

2005.01.28

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

MeCabを使ってMemorium向けに、PukiWikiのページから名詞・形容詞を抽出し、キーワードファイルを生成するPerlスクリプト (1/24) (http://d-k.cocolog-nifty.com/blog/2005/01/mecabmemoriumpu.html)を改良しました。

変更点は以下の2点。

  • 入力ファイルの文字コードをPerlスクリプト内で、EUCに変換すること
  • Perlスクリプトの引数として、入力ファイルのパスを指定できるようにした。入力ファイルの引数が省略された場合は、既定値でPukiWikiのファイルから入力するようにする。

これで好きなファイル(例えば、HTMLページなど)をMemoriumにキーワードとして渡すことができるようになりました。

以下、変更したソース。Perlの超超超初心者なので汚いところや変なところはご容赦を。

■Perlを起動して、出力ファイルをUTF8に変換するシェルスクリプト

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

■Perlスクリプト

#!/usr/bin/perl
use Jcode;

my $i_dir = '/home/hogehoge/public_html/pukiwiki/wiki';
my $o_dir = '/home/hogehoge/public_html/tmp';
my $o_memorium_fn = 'MemoriumKeywords.txt.euc';
my $from_pukiwiki = 'true';
my $i=1;
my @o_memorium;

# 標準入力から入力ファイル
if ( ($#ARGV+1) >= 1 ) {

  $from_pukiwiki = 'false';
  print "MeCab への入力ファイルは引数\n";
  my $i_filename = $ARGV[0];
  chomp $i_filename ;
  open(I_PUKIWIKI,"<$i_filename") || die "Can't open 引数の入力ファイル";

  $o_memorium[0] = ":ファイルからのメモ:";

}
else {
  print "MeCab への入力ファイルは PukiWiki\n";
  # Select PukiWiki Newest File
  opendir(DIR,$i_dir) or die "$!";

  while($filename=readdir(DIR) ) {
    @stat = stat $i_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]);

  my $i_pukiwiki = @i_date_pukiwiki[1];

  # Read PukiWiki Newest File
  my $i_pukiwiki_path = $i_dir."/".$i_pukiwiki;
  open(I_PUKIWIKI,"<$i_pukiwiki_path" ) or die "$!";

  $o_memorium[0] = ":PukiWikiからのメモ:";

}

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


while( <I_PUKIWIKI> ){
 # MeCab: Yet Another Part-of-Speech and Morphological Analyzer
 # http://chasen.org/~taku/software/mecab/
 use MeCab;

 # 入力ファイルの文字コードをEUCに変換
 $_ = jcode($_)->euc;

 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

 foreach my $row ( @memorium_card ) {
   my @rows = split(/\n/,$row);
   foreach my $card ( @rows ) {
     if ( $card =~  /名詞|形容詞|副詞|接続詞/ ) {
       my @meisi_list = split(/\t/,$card);
       
       # Output Memorium Format
       # 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);

print @o_memorium;
print O_MEMO @o_memorium;
close(O_MEMO);

print "PukiWiki -> Memorium.Done!\n";

EOF 

■MeCabで抽出したキーワードの例:

MeCab(+辞書 ipadic)は「半角英数字」はダメだけど、「HP」「in」のような「全角英数字」は抽出してくれるのか。ならPerlスクリプト内でMeCabへ渡す前に「半角英数字」を「全角英数字」に変換する?(宿題)

:メール:名詞-サ変接続
:バックアップ:名詞-サ変接続
:仕様:名詞-一般
:モバイル:名詞-一般
:台:名詞-接尾-一般
:目:名詞-接尾-一般
:いつ:名詞-副詞可能
:どこ:名詞-代名詞-一般
:名無し:名詞-一般
:結構:副詞-一般
:がっかり:副詞-助詞類接続
:同期:名詞-副詞可能
:ん:名詞-非自立-一般
:もん:名詞-非自立-一般
:無い:形容詞-自立
:in:名詞-一般
:ファイル:名詞-一般
:良い:形容詞-非自立
:テキストエディタ:名詞-一般
:やつ:名詞-非自立-一般
:インフォメーション:名詞-一般
:みなさま:名詞-代名詞-一般
:いつも:副詞-助詞類接続
:HP:名詞-一般
:作成:名詞-サ変接続
:更新:名詞-サ変接続
:なかなか:副詞-助詞類接続

1/29 追記:
「あたまがうにになる: 人工無能を作ろう~汚染チェック(perl) (http://www.i-on.gr.jp/~lan/blog/archives/000260.html)」を参考に「半角→全角」に変換の処理を、手元のPerlスクリプトの方には入れてみましたが効果の程は???

以上。

うーん、次の興味は「人口無能」かしら。



|

« Eclipse 3.0.1、Debian 3.0 (Woody)で動かず。ムキー。(1/27) | トップページ | ココログにGoogleのサイト内検索機能を追加 (1/28) »

コメント

コメントを書く



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




トラックバック

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

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

« Eclipse 3.0.1、Debian 3.0 (Woody)で動かず。ムキー。(1/27) | トップページ | ココログにGoogleのサイト内検索機能を追加 (1/28) »