新着キーワードの辞書ファイル作成とMeCab辞書の再インストール
前項で取得した新着キーワードでMeCabの辞書を作成します。MeCabの辞書ファイルはMeCabインストール時にIPA辞書ファイルを展開したディレクトリにできた文字コードEUCのcsvファイルになります。
辞書ファイルの詳しい書式はMeCab本家サイトの単語の追加方法を参照ください。インストールした辞書ファイルの書式は次のようになっています。
原村,1293,1293,8684,名詞,固有名詞,地域,一般,*,*,原村,ハラムラ,ハラムラ 大倉谷地,1293,1293,8676,名詞,固有名詞,地域,一般,*,*,大倉谷地,オオクラヤチ,オークラヤチ 駒ケ崎,1293,1293,8676,名詞,固有名詞,地域,一般,*,*,駒ケ崎,コマガサキ,コマガサキ
「表層形,左文脈との連結コスト,右文脈との連結コスト,出現コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音」という書式になっています。
冒頭の「MeCabの動作確認」で確認できるように、ここで登録した情報が形態素解析の結果で表示されます。はてなキーワードから登録したということが分かるように今回は読み仮名の1つに「はてなキーワード」と入れて以下の書式でcsvファイルを作成します。読み仮名の位置に「はてなキーワード」の文字列を入れることで形態素解析における単語検出の基準とします。
コストとはその単語がどれだけ出現しやすいかを示しています。小さいほど出現しやすいという意味になります。「左文脈との連結コスト」「右文脈との連結コスト」とは文章の中で左の単語、右の単語とのコストを参照して繋がりやすさからコストを増減させる値になります。この値を「-1」としておくと、辞書コンパイル時にMeCab内のモジュールmecab-dict-indexが自動的にIDを付与しますので、サンプルでは「-1」とします。
出現コストについては「10」としておきます。コストはintの範囲内であれば好きなように設定できます。精度の高い単語の検出を行いたい場合などは、単語の長さに応じて出現コストを小さいしていくなどのカスタマイズをMeCabドキュメントに準じて行ってください。
[新着キーワード],-1,-1,10,名詞,固有名詞,キーワード,*,*,*,*,[新着キーワード],[新着キーワード],はてなキーワード
辞書ファイルはPHPでテーブル内のデータを読み込んで作成します。
$util = new Util();
$pdo = new PDO("{$dbType}:host={$MYSQL_HOST}; dbname={$MYSQL_DATABASE}","{$MYSQL_USER}", "{$MYSQL_PASSWORD}");
$stmt = $pdo->prepare("SELECT * FROM hatena_keyword ORDER BY ID ASC");
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
$title = $row['title'];
// 辞書ファイルの書式
$str = "{$title},-1,-1,10,名詞,固有名詞,キーワード,*,*,*,*,{$title},{$title},はてなキーワード";
// csv出力
$util->trace("keyword.csv", $str);
}
# 略
CSVファイルへの出力はUtilクラス内のtraceメソッドで行います。traceメソッド内で文字コードをEUC-JPに変換して「keyword.csv」という名前のcsvファイルに出力しています。keyword.csvをIPA辞書ファイルを展開したディレクトリへコピーして以下のコマンドで辞書を再インストールします。
# make clean all # make install
辞書ファイルの再インストール後は、新着キーワードがmecabコマンドで形態素解析できているか確認します。例えば、新着キーワードの1つ「オタク中野要塞」という単語をMeCabが認識しているか確認してみます。
辞書ファイルの再インストール前はこのような結果でした。
# mecab オタク中野要塞 オタク 名詞,一般,*,*,*,*,オタク,オタク,オタク 中野 名詞,固有名詞,地域,一般,*,*,中野,ナカノ,ナカノ 要塞 名詞,一般,*,*,*,*,要塞,ヨウサイ,ヨーサイ EOS
辞書ファイル再インストール後に同じように形態素解析を実行します。
# mecab オタク中野要塞 オタク中野要塞 名詞,固有名詞,キーワード,*,*,*,*,オタク中野要塞,オタク中野要塞,はてなキーワード EOS
「オタク中野要塞」という単語が正しく認識され、登録した辞書ファイルの通りに結果が表示されていることを確認します。
