忍者ブログ

fukushimuのメモ帳

旧fukushimu'sページ。&旧理系大学院生の怠惰な日々。 fukushimuのメモ帳です。。
2017
09,26

«[PR]»

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2011
01,13
mecabに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
Name:
Title:
Mail:
URL:
Color:
Comment:
pass: emoji:Vodafone絵文字 i-mode絵文字 Ezweb絵文字

trackback
この記事のトラックバックURL:

プロフィール
HN:
fukushimu
性別:
男性
自己紹介:
熊本の某大学で情報処理の勉強をしてます。
カレンダー
08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログ内検索
つぶやきパーツテスト
カレンダー
最新コメント
[12/12 nvvkofkjdl]
[12/12 clmmxjdfzx]
[12/12 byuahjtfun]
[12/12 lyzithxbgh]
[12/11 xcjlfpuicg]
バーコード
最新TB
P R
カウンター
フリーエリア

Powered by Ninja.blog * TemplateDesign by TMP
忍者ブログ[PR]