Current Path : /usr/local/share/doc/mecab/ |
FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64 |
Current File : //usr/local/share/doc/mecab/dic-detail.html |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>MeCab の辞書構造と汎用テキスト変換ツールとしての利用</title> <link type="text/css" rel="stylesheet" href="mecab.css"> </head> <body> <h1>MeCab の辞書構造と汎用テキスト変換ツールとしての利用</h1> <p>$Id: dic-detail.html 161 2008-02-03 09:58:46Z taku-ku $;</p> <h2>概要</h2> <p>単語辞書の構造を理解することで, MeCab を汎用的なテキスト変換ツールとして利用することができます. 例えば, ひらがな to カタカナ変換, ローマ字 to ひらがな変換, Auto Link等を MeCab だけで実行できます </p> <h2>ファイル</h2> <p> 単語辞書を構築するには, 最低以下のファイルを作成する必要があります. </p> <ul> <li>*.csv ファイル (単語辞書) <li>matrix.def (連接表) <li>unk.def (未知語用品詞定義) <li>char.def (未知語の文字定義) <li>dicrc (設定ファイル) </ul> <h3>*.csv ファイル</h3> <p>単語辞書です</p> <p>エントリは, 以下のような CSV で追加します.</p> <pre> test,1223,1223,6058,foo,bar,baz </pre> <p>最初の4つは必須エントリで, それぞれ</p> <ul> <li>表層形 <li>左文脈ID (単語を左から見たときの文脈 ID) <li>右文脈ID (単語を右から見たときの文脈 ID) <li>単語コスト (小さいほど出現しやすい) </ul> <p>となっています. コスト値は short int (16bit 整数) の範囲におさめる必要があります. </p> <p> 5カラム目以降は, ユーザ定義の CSV フィールドです. 基本的に どんな内容でも CSV の許す限り追加することができます. </p> <h3>matrix.def</h3> <p>最初の行に連接表のサイズ(前件サイズ, 後件サイズ)を書きます. その後は, 連接表の前件の文脈 ID, 後件の文脈IDと, それに対応するコストを書きます. </p> <p>ある単語 A, B が連接をなすとき, </p> <ul> <li>前件文脈ID = 単語Aの右文脈ID <li>後件文脈ID = 単語Bの左文脈ID </ul> <p>となります. つまり, 単語辞書に登録した ID が連接表を参照する際の キーとなります. コスト値は short int (16bit 整数) の範囲におさめる必要があります. </p> <pre> 100 120 0 0 1 0 1 10 0 2 5 </pre> <p>上記の例では, 前件の文脈のサイズが100, 後件の文脈のサイズが 120 となって います. また, 前件文脈 0 から 後件文脈 1 への遷移コストが 10 となっています. </p> <h3>char.def</h3> <p>未知語処理のルールです. <a href="learn.html">こちら</a>を御覧ください. </p> <p>以下が最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT 1 0 0 SPACE 0 1 0 0x0020 SPACE </pre> <h3>unk.def</h3> <p>未知語に対する品詞列のテーブルです. <a href="learn.html">こちら</a>を 御覧ください. </p> <p>以下が最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT,0,0,0,* SPACE,0,0,0,* </pre> <h2>辞書のコンパイル</h2> <p>次のコマンドを実行することで, 解析用のバイナリ辞書を作成します. </p> <pre> % /usr/local/libexec/mecab/mecab-dict-index </pre> </p> <h2>ケーススタディ</h2> <p>example ディレクトリにいくつかの応用例があります.</p> <h3>Auto Link</h3> <p>Hatena Keyword のような Auto Link を実装してみます</p> <ul> <li>url.csv <p>単語としてキーワード, 品詞としてキーワードに対応する URL を書きます. 連接の状態は1状態で十分なので, 左文脈/右文脈IDともに 0 とします. コスト値は長いキーワードが優先されるよう設定します. 例えば以下のような関数を使うとよいでしょう.</p> <pre>cost = (int)max(-36000, -400 * (length^1.5)) </pre> url.csv <pre> Google,0,0,-5878,http://www.google.com/ Yahoo,0,0,-4472,http://www.yahoo.com/ ChaSen,0,0,-5878,http://chasen.org/ 京都,0,0,-3200,http://www.city.kyoto.jp/ ... </pre> <li>matrix.def <p>1 状態なので, 連接表のサイズは 1 x 1 となります. 後件 0 から前件 0 の連接コストは 0 とします.</p> <pre> 1 1 0 0 0 </pre> <li>char.def <p>最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT 1 0 0 SPACE 0 1 0 0x0020 SPACE </pre> <li>unk.def <p>最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT,0,0,0,* SPACE,0,0,0,* </pre> <li>dicrc <p>autolink というフォーマットを作成し, それがデフォルトの出力になるようにします</p> <pre> cost-factor = 800 bos-feature = BOS/EOS output-format-type=autolink node-format-autolink = <a href="%H">%M</a> unk-format-autolink = %M eos-format-autolink = \n </pre> <li>コンパイル + テスト <pre> % /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -c euc-jp reading ./unk.def .. 2 emitting double-array: 100% |###########################################| reading ./dic.csv .. 4 emitting double-array: 100% |###########################################| emitting matrix : 100% |########################################### done! % mecab -d . 京都に行った. <a href="http://www.city.kyoto.jp/">京都</a>に行った。 YahooとGoogle <a href="http://www.yahoo.com/">Yahoo</a>と<a href="http://www.google.com/">Google</a> </pre> </ul> <h3>ひらがな to カタカナ変換ツール</h3> <ul> <li>dic.csv <p>単語としてひらがな1文字, 品詞として各ひらがな対応するカタカナ1文字を書きます. 連接の状態は1状態で十分なので, 左文脈/右文脈IDともに 0 とします. 曖昧性がないため コスト値は 0 とします</p> <pre> う゛,0,0,0,ヴ あ,0,0,0,ア い,0,0,0,イ う,0,0,0,ウ え,0,0,0,エ お,0,0,0,オ ぁ,0,0,0,ァ ぃ,0,0,0,ィ ぅ,0,0,0,ゥ ぇ,0,0,0,ェ ぉ,0,0,0,ォ か,0,0,0,カ き,0,0,0,キ く,0,0,0,ク け,0,0,0,ケ こ,0,0,0,コ が,0,0,0,ガ ぎ,0,0,0,ギ ぐ,0,0,0,グ げ,0,0,0,ゲ ご,0,0,0,ゴ さ,0,0,0,サ し,0,0,0,シ す,0,0,0,ス せ,0,0,0,セ そ,0,0,0,ソ ざ,0,0,0,ザ じ,0,0,0,ジ ず,0,0,0,ズ ぜ,0,0,0,ゼ ぞ,0,0,0,ゾ た,0,0,0,タ ち,0,0,0,チ つ,0,0,0,ツ て,0,0,0,テ と,0,0,0,ト だ,0,0,0,ダ ぢ,0,0,0,ヂ づ,0,0,0,ヅ で,0,0,0,デ ど,0,0,0,ド っ,0,0,0,ッ な,0,0,0,ナ に,0,0,0,ニ ぬ,0,0,0,ヌ ね,0,0,0,ネ の,0,0,0,ノ は,0,0,0,ハ ひ,0,0,0,ヒ ふ,0,0,0,フ へ,0,0,0,ヘ ほ,0,0,0,ホ ば,0,0,0,バ び,0,0,0,ビ ぶ,0,0,0,ブ べ,0,0,0,ベ ぼ,0,0,0,ボ ぱ,0,0,0,パ ぴ,0,0,0,ピ ぷ,0,0,0,プ ぺ,0,0,0,ペ ぽ,0,0,0,ポ ま,0,0,0,マ み,0,0,0,ミ む,0,0,0,ム め,0,0,0,メ も,0,0,0,モ ゃ,0,0,0,ャ や,0,0,0,ヤ ゅ,0,0,0,ュ ゆ,0,0,0,ユ ょ,0,0,0,ョ よ,0,0,0,ヨ ら,0,0,0,ラ り,0,0,0,リ る,0,0,0,ル れ,0,0,0,レ ろ,0,0,0,ロ ゎ,0,0,0,ヮ わ,0,0,0,ワ ゐ,0,0,0,ヰ ゑ,0,0,0,ヱ を,0,0,0,ヲ ん,0,0,0,ン </pre> <li>matrix.def <p>1 状態なので, 連接表のサイズは 1 x 1 となります. 後件 0 から前件 0 の連接コストは 0 とします.</p> <pre> 1 1 0 0 0 </pre> <li>char.def <p>最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT 1 0 0 SPACE 0 1 0 0x0020 SPACE </pre> <li>unk.def <p>最低限の設定 (DEFAULT と SPACE) です</p> <pre> DEFAULT,0,0,0,* SPACE,0,0,0,* </pre> <li>dicrc <p>katakana というフォーマットを作成し, それがデフォルトの出力になるよう にします</p> <pre> dictionary-charset = euc-jp cost-factor = 800 bos-feature = BOS/EOS output-format-type=katakana node-format-katakana = %H unk-format-katakana = %M eos-format-katakana = \n </pre> <li>コンパイル + テスト <pre> % /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -c euc-jp reading ./unk.def .. 2 emitting double-array: 100% |###########################################| reading ./dic.csv .. 4 emitting double-array: 100% |###########################################| emitting matrix : 100% |########################################### done! % mecab -d . これはてすとです コレハテストデス </pre> </ul> <hr> <p>$Id: dic-detail.html 161 2008-02-03 09:58:46Z taku-ku $;</p> </body> </html>