mecabをインストールしてwikiの辞書データを入れてphpで使えるようにする手順メモ
はじめに
前やった時はあまりハマった記憶なかったのだが、今回は辞書データ作るところで何故かハマりました。。
ほとんど他サイトに書いてあるとおりだけどいちおう手順をまとめておく
環境はcentos6.7
ざっくり以下の手順
・mecabインストール
・wikiからデータ取得
・wikiを辞書データとして使えるように
・phpから使えるように
mecabインストール
mecab をcentosにyumでインストール - Qiita
こちらをそのまま
wikiからデータ取得
fukushimuのメモ帳 [mecab] mecab辞書にwikipediaのタイトルリストを追加 [wikipedia][はてなキーワード]
こちらを参考
cd ~/work wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz gzip -d jawiki-latest-all-titles-in-ns0.gz
wikiを辞書データとして使えるように
流れは辞書データを作るためのcsvを作って辞書データを作る
1. コストデータなしcsvを作る
2. 1.を入力してコストデータありcsvを作る
3. 2.を入力して辞書データデータ作る
1. コストデータなしcsvを作る
上記のurlのperlのスクリプトをほとんどそのままphpに
<?php
$input = "./jawiki-latest-all-titles-in-ns0";
$output = "./wiki.csv";
$fp_read = fopen($input, "r");
$fp_write = fopen($output, "w");
if (!$fp_read) {
exit("入力ファイルを読みむことができませんでした");
} else if (!$fp_write) {
exit("出力ファイルを読みむことができませんでした");
}
$n = 0;
while($row = fgets($fp_read)) {
$row = trim($row);
if (preg_match("/^\./", $row)) continue;
else if (preg_match("/^[0-9]{1,100}$/", $row)) continue;
else if (preg_match("/^[0-9]{4}./", $row)) continue;
else if (preg_match("/(曖昧さの回避)/", $row)) continue;
else if (preg_match("/[*+.,]/", $row)) continue;
else if (!$row) continue;
$csv = sprintf(
"%s,,,,名詞,一般,*,*,*,*,%s,*,*,wiki\r\n"
,$row
,$row
);
fputs($fp_write, $csv);
}
fclose($fp_read);
fclose($fp_write);
2. 1.を入力してコストデータありcsvを作る
MeCab システム辞書への単語追加(mecab-ipadic-neologd) | あぱーブログ
こちらの記事の以下の箇所を実行
・IPA辞書の文字コードを UTF-8 に変換
・mecab-ipadic のモデルファイルの設置
/usr/libexec/mecab/mecab-dict-index -m mecab-ipadic-2.7.0-20070801.model -d mecab-ipadic-2.7.0-20070801 -u wiki2.csv -f utf8 -t utf8 -a wiki.csv
3. 2.を入力して辞書データデータ作る
/usr/libexec/mecab/mecab-dict-index -d /usr/lib64/mecab/dic/ipadic -u wiki2.dic -f utf8 -t utf8 wiki2.csv