MeCabの辞書にはてなキーワードを追加するスクリプトを書いた

めかぶ【北海道函館産メカブ】天然100%芽かぶ!

アクセス解析見てたら、検索エンジンから404に飛んでた人が結構いたので、
以前(サーバデータ消えるまで)、公開してた記事を復活させるよー。
まずはMeCab関連のこいつから。
すこしずつ戻していきますん。

・経緯
基本辞書(IPA)ではデータ不足
→ NAIST辞書インスコ
 → それでもたりない
  → はてなキーワードを使おう
ネットに転がっていた
他人のスクリプトを動かしてみる
→ ふりがながない!エラーでる!
 → 自分で書こう

・手順

まずは公式からデータ(ID付きじゃない奴)を拝借

http://d.hatena.ne.jp/hatenadiary/20060922/1158908401

以下のスクリプトを実行

※ 第一引数がファイルの場所 nkf(-e)も付けてね

例:perl convertdic-hatena.pl /etc/hogehoge/hatena.txt | nkf -e hatena.csv

・convertdic-hateva.pl

use strict;
use warnings;
use utf8;
use encoding 'utf8';
binmode STDOUT, ':utf8';

# 第一引数がファイルの場所
my $read_file = $ARGV[0];

# はてなキーワードの配布ファイルはEUCなので
open(IN, "<:encoding(euc-jp)", "$read_file") or die "read_file not found";

while(<IN>)
{
     chomp $_;

     # ,を削除
     $_ =~ s/,//g;

     # いらないものは飛ばす
     next if($_ =~ /[0-9][\/|\-]+$/);

     # タブで区切って配列へ
     my @data = split(/\t/, $_);

     # 3文字以下はさよなら
     next if(length($data[1]) < 3);

     # コスト計算は難しくてなんとも言えないので、適当ですごめんなさい
     my $cost = -150 * length($data[1]) * 1.5;
     #まずありえないが一応
     $cost = -30000 if($cost < -30000);

     # ふりがながあれば
     if($data[0])
     {
          # 読み・発音の2要素用に片仮名に変換
          my $kata = $data[0];
          $kata =~ tr/あ-ん/ア-ン/;
          print qq|$data[1],0,0,$cost,名詞,固有名詞,*,*,*,*,$data[1],$kata,$kata,はてなキーワード,\n|;
     }
     else
     {
          print qq|$data[1],0,0,$cost,名詞,固有名詞,*,*,*,*,$data[1],*,*,はてなキーワード,\n|;
     }

}

hatena.csvが生成されると思うので、そいつをNAIST辞書のあるとこに移動。

そして、

リコンパイル (make clean → make の流れ)

→ インストール (make install)

これで完了。

・実行結果(NAISTのみ)

[hoge ~]$ mecab
Perlは楽しいなー
Perl 名詞,固有名詞,組織,*,*,*,*
は 助詞,係助詞,*,*,*,*,は,ハ,ワ
楽しい 形容詞,自立,*,*,形容詞・イ段,基本形,楽しい,タノシイ,タノシイ
なー 助詞,終助詞,*,*,*,*,なー,ナー,ナー
EOS

・実行結果(はてなキーワード追加)

[hoge ~]$ mecab
Perlは楽しいなー
Perl 名詞,固有名詞,*,*,*,*,ぱーる,パール,パール,はてなキーワード,
は 助詞,係助詞,*,*,*,*,は,ハ,ワ,,
楽しい 名詞,固有名詞,*,*,*,*,たのしい,タノシイ,タノシイ,はてなキーワード,
なー 助詞,終助詞,*,*,*,*,なー,ナー,ナー,,
EOS

はてなキーワードのデータはコストを低くしてるので(多分みんな-900以下)、”楽しい”ははてなのやつが優先されたみたい。

ここらへんは好きに変えるといいかもなー。

取り敢えずここまで。

・おまけ

変換がうまくいかなくて頑張ってカタカタやったけど、結局うまくできて使わなかったやつ。

@平仮名片仮名の連想配列(ハッシュ)

my %text_convert = 
		("あ" => "ア", "い" => "イ", "う" => "ウ", "え" => "エ", "お" => "オ",
		"か" => "カ", "き" => "キ", "く" => "ク", "け" => "ケ", "こ" => "コ",
		"さ" => "サ", "し" => "シ", "す" => "ス", "せ" => "セ", "そ" => "ソ",
		"た" => "タ", "ち" => "チ", "つ" => "ツ", "て" => "テ", "と" => "ト",
		"な" => "ナ", "に" => "ニ", "ぬ" => "ヌ", "ね" => "ネ", "の" => "ノ",
		"は" => "ハ", "ひ" => "ヒ", "ふ" => "フ", "へ" => "ヘ", "ほ" => "ホ",
		"ま" => "マ", "み" => "ミ", "む" => "ム", "め" => "メ", "も" => "モ",
		"や" => "ヤ", "ゆ" => "ユ", "よ" => "ヨ",
		"ら" => "ラ", "り" => "リ", "る" => "ル", "れ" => "レ", "ろ" => "ロ",
		"わ" => "ワ", "を" => "ヲ", "ん" => "ン",
		"が" => "ガ", "ぎ" => "ギ", "ぐ" => "グ", "げ" => "ゲ", "ご" => "ゴ",
		"ざ" => "ザ", "じ" => "ジ", "ず" => "ズ", "ぜ" => "ゼ", "ぞ" => "ゾ",
		"だ" => "ダ", "ぢ" => "ヂ", "づ" => "ヅ", "で" => "デ", "ど" => "ド",
		"ば" => "バ", "び" => "ビ", "ぶ" => "ブ", "べ" => "ベ", "ぼ" => "ポ",
		"ぱ" => "パ", "ぴ" => "ピ", "ぷ" => "プ", "ぺ" => "ペ", "ぽ" => "ポ",
		"ぁ" => "ァ", "ぃ" => "ィ", "ぅ" => "ゥ", "ぇ" => "ェ", "ぉ" => "ォ",
		"っ" => "ッ", "ゃ" => "ャ", "ゅ" => "ュ", "ょ" => "ョ");

参考:https://code.google.com/p/mecab/

コメントを残す