2011 |
01,13 |
mecabにwikipediaのタイトルの単語を追加します。
ググると、既に様々な人がされているので、参考にさせて頂きました。また、本家のサイトで詳しく説明されています。
csvファイルの作成にperlを使いました。
以下が作業の流れです。
wikipediaのタイトルを辞書に追加すると
これが
こうなってくれます。つまり、wikipediaに登録されている項目をmecabが判別してくれるのですね。
では本題。
1) まず、wikipediaのタイトルリスト(jawiki-latest-all-titles-in-ns0.gz)をこちら(http://download.wikimedia.org/jawiki/latest/)からダウンロード。適当なディレクトリ(home/foo/bar)に解凍します。
2) 次に、ダウンロードしたファイルから辞書へ変換するためのCSVファイルを作成します。ファイルの中身を見るとこのようになっていました。
これをこのようなCSV形式に整形し、ファイルに保存します
「#いらない語をとばす」のところで自分がいらないなと思った単語をとばしましょう。僕は.(ドット)から始まる後や(曖昧さの回避)の単語、数字のみの単語などを省きました。また、CSVファイルに書き込む際に3文字以下の単語は省きました。(lengthでuse utf8をしないと日本語などのユニコード文字の長さがちゃんとはかれないようです。)
これでCSVファイルができあがリました。
3)CSVファイルを辞書ファイル(.dic)へ変換します。CSVファイルのあるディレクトリで、以下のコマンドを入力。
できました。
最後に/usr/local/etc/mecabrcに以下を追加。
これで終了です。この調子ではてなキーワードもいれてみようと思います。
--2011-01-14 追記--
はてなキーワードリストをこちら(http://d.hatena.ne.jp/hatenadiary/20060922/1158908401)からダウンロードして、辞書に登録しました。
はてなキーワードにはふりがながあるものもあるので、スクリプトを少し改良しました。
変換後の中身
しかし、何と言うか、はてなキーワードはwikipediaと比べてなんだか世俗的、というかフォークソノミーちっく(死語!?)ですね。それぞれの単語追加の際のポリシーみたいなものがあるのでしょうかね。
ググると、既に様々な人がされているので、参考にさせて頂きました。また、本家のサイトで詳しく説明されています。
csvファイルの作成にperlを使いました。
以下が作業の流れです。
1)wikipediaのデータをダウンロード
2)ダウンロードしたデータからユーザ辞書のCSVファイルを作成
3)CSVファイルを辞書ファイル(.dic)へ変換
wikipediaのタイトルを辞書に追加すると
$ mecab
千と千尋の神隠し
千 名詞,数,*,*,*,*,千,セン,セン
と 助詞,格助詞,引用,*,*,*,と,ト,ト
千尋 名詞,一般,*,*,*,*,千尋,チヒロ,チヒロ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
神隠し 名詞,一般,*,*,*,*,神隠し,カミガクシ,カミガクシ
EOS
これが
$ mecab
千と千尋の神隠し
千と千尋の神隠し 名詞,固有名詞,*,*,*,*,千と千尋の神隠し,*,*,wikipedia_word,
EOS
こうなってくれます。つまり、wikipediaに登録されている項目をmecabが判別してくれるのですね。
では本題。
1) まず、wikipediaのタイトルリスト(jawiki-latest-all-titles-in-ns0.gz)をこちら(http://download.wikimedia.org/jawiki/latest/)からダウンロード。適当なディレクトリ(home/foo/bar)に解凍します。
2) 次に、ダウンロードしたファイルから辞書へ変換するためのCSVファイルを作成します。ファイルの中身を見るとこのようになっていました。
千ちゃんの幸せラジオドーム
千とせ
千と千尋
千と千尋の神隠し
千と千尋の神隠し_サウンドトラック
千なり
千のナイフ
これをこのようなCSV形式に整形し、ファイルに保存します
工藤,1223,1223,6058,名詞,固有名詞,人名,名,*,*,くどう,クドウ,クドウ詳しくは公式サイトにのっていますのでそちらを。なお、自分お好きな情報をCSVが許す範囲で 追加できるとのことなので、先人に習って、最後にwikipedia_wordを追加します。 CSVへの変換はこちらのサイトのperlスクリプトを参考にさせて頂きました(少し改変しました。)。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
binmode(STDOUT, ":utf8");
use encoding 'utf8';
my $file1 = "jawiki-latest-all-titles-in-ns0";
my $file2 = "wikipedia.csv";
open(IN, "$file1");
open(OUT, ">$file2");
binmode OUT, ":utf8"; ## <- こっちが正しい
for(<IN>) {
chomp($_);
print $_."\n";
## いらない単語をとばす
next if $_ =~ /^\./;
next if $_ =~ /(曖昧さの回避)/;
next if $_ =~ /^[0-9]{1,100}$/;
next if $_ =~ /[0-9]{4}./;
if (length($_) > 3) {
print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,*,*,*,*,$_,*,*,wikipedia_word,\n";
}
}
sub max {
my $comp = shift @_;
my $val = shift @_;
my $max = $comp;
if ( $comp <= $val ) {
$max = $val;
}
return int($max);
}
「#いらない語をとばす」のところで自分がいらないなと思った単語をとばしましょう。僕は.(ドット)から始まる後や(曖昧さの回避)の単語、数字のみの単語などを省きました。また、CSVファイルに書き込む際に3文字以下の単語は省きました。(lengthでuse utf8をしないと日本語などのユニコード文字の長さがちゃんとはかれないようです。)
これでCSVファイルができあがリました。
3)CSVファイルを辞書ファイル(.dic)へ変換します。CSVファイルのあるディレクトリで、以下のコマンドを入力。
$ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic \
> -u wikipedia.dic -f utf8 -t utf8 wikipedia.csv
reading wikipedia.csv ... 970539
emitting double-array: 100% |###########################################|
done!
できました。
最後に/usr/local/etc/mecabrcに以下を追加。
userdic = /home/foo/bar/foo.dic
これで終了です。この調子ではてなキーワードもいれてみようと思います。
--2011-01-14 追記--
はてなキーワードリストをこちら(http://d.hatena.ne.jp/hatenadiary/20060922/1158908401)からダウンロードして、辞書に登録しました。
はてなキーワードにはふりがながあるものもあるので、スクリプトを少し改良しました。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use encoding 'utf8';
#my ($file1,$file2) = @ARGV;
my $in = "hatena.csv";
my $ou = "hatena_keyword2.csv";
open(IN, "$in");
open(OUT, ">$ou");
binmode OUT, ":utf8";
for(<IN>) {
chomp($_);
######## for hatena <- ここを追加
$_ =~ s/(.*?)\t(.*?)/$2/;
my $yomi = $1;
$yomi = '*' if $yomi eq '';
print $_."\n";
next if $_ =~ /^\./;
next if $_ =~ /(曖昧さの回避)/;
next if $_ =~ /^[0-9]{1,100}$/;
next if $_ =~ /[0-9]{4}./;
if (length($_) > 1) {
# print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,*,*,*,*,$_,*,*,wikipedia_word,\n";
print OUT "$_,0,0,".max(-36000,-400 * (length^1.5)).",名詞,固有名詞,key_word,key_word,*,*,$yomi,*,*,hatena_word,\n";
}
}
sub max {
my $comp = shift @_;
my $val = shift @_;
my $max = $comp;
if ( $comp <= $val ) {
$max = $val;
}
return int($max);
}
変換後の中身
千と千尋の神隠し,0,0,-3600,名詞,固有名詞,key_word,key_word,*,*,せんとちひろのかみかくし,*,*,hatena_word,
しかし、何と言うか、はてなキーワードはwikipediaと比べてなんだか世俗的、というかフォークソノミーちっく(死語!?)ですね。それぞれの単語追加の際のポリシーみたいなものがあるのでしょうかね。
PR
Post your Comment
プロフィール
HN:
fukushimu
性別:
男性
自己紹介:
熊本の某大学で情報処理の勉強をしてます。
カレンダー
カテゴリー
ブログ内検索
つぶやきパーツテスト
カレンダー
最新記事
最新コメント
最古記事
最新TB
P R
カウンター
フリーエリア