mecabに新しい辞書を追加した際の手順の記録。
1.辞書の元になるデータをダウンロードする
データとしてよく利用されているものに、wikipediaのタイトルリストやはてなキーワード、人名事典などがある。今回はwikipediaのタイトルリストを利用した。(はてなキーワードも追加した。このページの下のほう)
ダウンロード先URL
————————————-
http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
————————————-
人名事典ならこちらのページからダウンロードできる
(個人的には人名事典は使わない。人名が普通名詞と結構かぶって、名詞の読みが人名なったり、長めの普通名詞が人名と区切られたりと不都合が起こる)
————————————-
http://www.mwsoft.jp/programming/munou/ime_dictionary_link.html#person
————————————-
2.不要なタイトルは削除する
ここからタイトルリストをCSVファイルに加工していく。保存名はwikipedia.csvとした。
まず秀丸エディタで開き、置換の繰り返しで不要タイトルを削除した。
個人的に削除したタイトルの条件
・数字だけのもの
・「(曖昧さ回避)」を含むもの
・3文字以下のもの
・次の言葉で始まるタイトル
————————————-
「日本の~」「日本に~」「日本と~」「日本で~」
「中国に~」「中国の~」
「アメリカに~」「アメリカの~」
「ヨーロッパに~」「ヨーロッパの~」
「.(ドット)~」
————————————-
次の文字を含むタイトル
————————————-
「,(カンマ)」←あるとフォーマットエラーになる。カンマを残すならエスケープが必要。
————————————-
・次の言葉で終わるタイトル
————————————-
「_(何か)」「一覧」「の登場人物」
————————————-
秀丸エディタのマクロで置換するファイル: 右クリックしてダウンロード
3.辞典に登録できる状態に整形する
辞書に登録されている単語は通常CSVファイルでこのようになっている
————————————-
工藤,1223,1223,6058,名詞,固有名詞,人名,名,*,*,くどう,クドウ,クドウ
————————————-
値の意味は左から
————————————-
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
————————————-
なので一旦こうした。(スコア)は後で数字に置き換える。
————————————-
日清どん兵衛
————————————-
↓↓↓
————————————-
日清どん兵衛,0,0,(スコア),名詞,固有名詞,*,*,*,*,日清どん兵衛,*,*,ウィキペディア
————————————-
<20150814 追記>
固有名詞のスコアは1でいいと思う。
————————————-
日清どん兵衛,0,0,1,名詞,固有名詞,*,*,*,*,日清どん兵衛,*,*,ウィキペディア
————————————-
このとき利用した秀丸エディタの正規表現
検索:^(.+)$
置換:¥1,0,0,(スコア),名詞,固有名詞,*,*,*,*,\1,*,*,ウィキペディア
<20150814 追記>
スコア1の場合
————————————-
置換:¥1,0,0,1,名詞,固有名詞,*,*,*,*,\1,*,*,ウィキペディア
————————————-
次にスコアを登録する。
コストは、その単語がどれだけ出現しやすいかを示していて、小さいほど出現しやすいという意味になるらしい。
長いキーワードが優先されるよう設定したいので、文字数に比例してコストが小さくなるように設定した。こちらのサイトにある式を参考にコスト値を求める。
コストを求める式
—————————————–
コスト値 = -400 * (文字の長さの1.5乗)の整数
但し、最小で-36000
—————————————–
スコアの登録はUWSCでファイルから一行ずつ読み込んで置換。(秀丸エディタでの計算がよくわからなかったので)
//UWSCファイルの一部抜粋
///////////////////////////////////////////////////////
//タイトルの文字数
moji_suu = POS(“,0,0,(スコア)”,Line_data) – 1
cost = 0 //初期化
//文字数がマイナス(取得失敗)でべき乗するとエラーが出るようなのでIFで回避
IFB moji_suu > 0
cost = INT(-400 * POWER(moji_suu, 1.5))
IF cost < -36000 THEN cost = -36000
ENDIF
Line_data = REPLACE(Line_data,"(スコア)", cost)
///////////////////////////////////////////////////////
最初からすべてUWSCでやればよかったとも思った。秀丸エディタで面倒な置換を何度も繰り返す必要なかったなと。
4.辞書のコンパイルとインストール
これ以降の作業は必要な辞書を全部そろえてからでいい。
辞書登録には「システム辞書」と「ユーザー辞書」があるが今回はシステム辞書に追加する。(登録に時間はかかるが解析は早い)
csvファイルをmecab-ipadic-2.7.0-20070801ディレクトリに移動する。
ここにcsvファイルも入れておく。この際、改行コードも「LF」になってることを確認した。
自分の環境のパス(cd でココに移動)
——————————————–
/home/username/local/mecab-ipadic-2.7.0-20070801
——————————————–
※↑おそらくこのパスは、辞典CSVファイルが入ったディレクトリならどこでもいい。既に消去してしまっていたら、一時ファイルを作ればいいと思う。そこで次のコマンドを実行する。
mecab-dict-indexを実行するので場所を確認
——————————————–
/home/username/local/libexec/mecab/mecab-dict-index
——————————————–
mecabが使える状態ならどこかにあるはず
コマンドを実行する。
実際のコマンド
——————————————–
/home/username/local/libexec/mecab/mecab-dict-index -f utf8 -t utf8
——————————————–
「-f」はCSVの文字コード、-「t」はバイナリ辞書の文字コードを指定。
(「mecab-ipadic-2.7.0-20070801」がカレントディレクトリでないとエラーが出る)
また、最初に実行した際、こんなエラーも出た
——————————————–
reading ./wikipedia.csv … dictionary.cpp(167) [n == 5] format error:
——————————————–
「,」を含むタイトルが残っていて、削除することでうまくいった。
最後にインストールも忘れずに行う
——————————————–
make install
——————————————–
※もし、インストール前のmecabディレクトリを消してしまっていた場合、インストールはできない。そのときはインストールは諦めて、新しくできた辞書ファイルを所定の場所に移動させる(置換)で辞書を追加することができる。
移動させるファイル名
——————————————
char.bin
sys.dic
unk.dic
matrix.bin
——————————————
移動前(ファイルができる場所)
——————————————
/home/username/local/mecab-ipadic-2.7.0-20070801
——————————————
↓↓↓
移動先
——————————————
/home/username/local/lib/mecab/dic/ipadic
——————————————
はてなキーワードの登録もやってみた
やりかたはwikipediaのときとほぼ一緒。
1.データをダウンロード
ダウンロード元
—————————-
•http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
—————————-
2.CSVファイルの整形
次の条件のタイトルは削除。
・「,(カンマ)」を含むもの
・「2001-01-01」のような日付だけのもの
・数値文字参照「&#~」を含むもの
・「ぱーせんとぜろぜろ」のタイトル(UTF-8に文字コード変換するとタイトルの%00(?
)が半角スペースに置き換わり、インストールエラーが出る。こんなの→「empty word is found, discard this line」)
・「明日(ぬくい)」という人名。残しておくと、「明日(あした)」が「ぬくい」と解釈されて邪魔
・「???」という項目
秀丸エディタのマクロで置換するファイル: 右クリックしてダウンロード
そして、辞書用に並び替え。
—————————————————————–
ひかりのもり(タブ)光の森
—————————————————————–
↓↓↓
—————————————————————–
光の森,0,0,(スコア),名詞,固有名詞,*,*,*,*,光の森,ひかりのもり,ひかりのもり,はてなキーワード
—————————————————————–
wikipediaのタイトルリストと違い、多くのタイトルにふりがな情報がある。
実際に使った秀丸エディタの正規表現
ふりがながある項目に対して有効
—————————————————————–
検索:^(.+)\t(.+)$
置換:\2,0,0,(スコア),名詞,固有名詞,*,*,*,*,\2,\1,\1,はてなキーワード
—————————————————————–
ふりがながない項目用に次の置換も実行
—————————————————————–
検索:^\t(.+)$
置換:\1,0,0,(スコア),名詞,固有名詞,*,*,*,*,\1,*,*,はてなキーワード
—————————————————————–
上記の正規表現で置換すると、ふり仮名のないタイトルにおいて、空欄「,,(連続カンマ)」ができてしまう。空欄は「*」に置き換える「,,」→「,*,」
あとは(COST)の部分を数値に置き換えて「mecab-dict-index」を実行、そしてインストール「make install」。(もしくは、ファイル移動)