work.log

元エンジニアの備忘録的ブログ

MeCabにWikiのタイトルリストを学習させる

投稿:2014-06-09 20:05  更新:

MeCab のメモ書き。

どうしても MeCab を使わないと出来ない壁にぶち当たったので久しぶりセットアップ。

が、ちょっとメモがアレすぎて思い出すのに時間がかかったのでちゃんとメモをしておこうと思います。

インストール直後の MeCab だけだと最新の ? 言葉に対応できないので、Wikipedia のタイトルを MeCab に学習させて賢くしてみます。

とりあえず、手順だけを簡単に。

$ cd /home/user
$ wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
$ gzip -d jawiki-latest-all-titles-in-ns0.gz

このファイルをスクリプトで学習用の CSV に変換します。

このスクリプトは create_dic.pl で保存しました。

#!/usr/bin/perl

use strict;
use warnings;

my $file1 = "jawiki-latest-all-titles-in-ns0";
my $file2 = "wikipedia.csv";

open(IN, "< $file1");
open(OUT, "> $file2");

for(<IN>) {
  chomp($_);
  #print $_."\n";

  ## いらない単語をとばす
  next if $_ =~ /^\./;
  next if $_ =~ /(曖昧さの回避)/;
  next if $_ =~ /^[0-9]{1,100}$/;
  next if $_ =~ /[0-9]{4}./;
  next if $_ =~ /[*+.,]/;
 
 
  if (length($_) > 3) {
    print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,*,*,*,*,$_,*,*,wikipedia,\n";
  }
}

sub max {
    my $comp = shift @_;
    my $val  = shift @_;
    my $max  = $comp;
    if ( $comp <= $val ) {
      $max = $val;
    }
    return int($max);
}

後は、先ほどダウンロードしたファイルと同じ階層で実行。
少し待つと CSV が出来上がるので MeCab に学習させます。

$ perl create_dic.pl 
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic \
-u wikipedia.dic -f ut8 -t utf8 wikipedia.csv
reading wikipedia.csv ... 1420543
emitting double-array: 100% |###########################################| 

done!

作成したら mecabrc にこの辞書を追加。

$ sudo vi /usr/local/etc/mecabrc
----- 追加 -----
userdic = /home/user/wikipedia.dic

これで OK。

比較的新しい単語もバッチリ分かち書きできるようになりました。