読者です 読者をやめる 読者になる 読者になる

mecabをインストールしてwikiの辞書データを入れてphpで使えるようにする手順メモ

php mecab

はじめに

前やった時はあまりハマった記憶なかったのだが、今回は辞書データ作るところで何故かハマりました。。
ほとんど他サイトに書いてあるとおりだけどいちおう手順をまとめておく

環境は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 のモデルファイルの設置

wiki2.csvにコストが追記されたcsvが出力される

/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 

phpから使えるように

phpでmecab - Qiita
このとおりやったらいけた
が、以下もインストールする必要があった

yum install mecab-devel

以上です