1. 導入
Webアプリケーションを開発する際、検索機能の強化や検索インデックスの作成、あるいは読み上げ機能の実装などで「漢字をひらがなに変換したい」というニーズが発生することは珍しくありません。PHP単体では日本語の読みを取得する関数は標準搭載されていませんが、形態素解析ライブラリである「Igo-PHP」を活用することで、高精度な変換が可能になります。本記事では、実務で役立つ形態素解析を用いた読み変換の実装と、環境依存によるトラブルを回避するためのポイントを解説します。
2. 基礎知識
形態素解析とは、文章を辞書に基づいて最小単位(形態素)に分解し、それぞれの品詞や読みを解析する技術です。「Igo-PHP」は、日本語の形態素解析エンジンである「MeCab」の辞書(ipadic)を利用可能なPHPライブラリです。解析後のオブジェクトには「feature」と呼ばれるメタ情報が含まれており、その中に単語の「読み(カタカナ)」が格納されています。このカタカナを、PHPのマルチバイト文字列関数である「mb_convert_kana」を使ってひらがなに変換するのが、一般的な実装の流れとなります。
3. 実装/解決策
実装の肝は、解析結果のfeature要素から「読み」を正しく抽出することです。Igo-PHPの場合、読み情報はカンマ区切りされたデータの8番目(インデックス7)に格納されています。ただし、辞書に登録されていない単語や記号が含まれる場合、このインデックスが存在しないことがあるため、issetで存在確認を行うことが重要です。また、mb_convert_kana関数が期待通りに動作しない場合は、文字コード設定や言語設定を見直す必要があります。
4. サンプルプログラム
以下は、漢字を含む文章をひらがなに変換する実用的なサンプルです。
parse($text);
$kanaStr = “”;
foreach ($result as $value) {
// featureはカンマ区切りで情報が格納されている
$feature = explode(“,”, $value->feature);
// 読み情報(インデックス7)があればそれを連結、なければ元の単語を採用
$kanaStr .= isset($feature[7]) ? $feature[7] : $value->surface;
}
// カタカナをひらがなに変換(”c”オプション:全角カタカナを全角ひらがなに変換)
$hiragana = mb_convert_kana($kanaStr, “c”, “utf-8”);
echo “原文: ” . $text . PHP_EOL;
echo “読み: ” . $hiragana . PHP_EOL;
?>
5. 応用・注意点
現場での開発において、特に注意すべき点が3つあります。
一つ目は文字コードの統一です。ソースコード、辞書ファイル、出力先のすべてがUTF-8であることを確認してください。エンコーディングの不一致は、文字化けやmb_convert_kanaが機能しない最大の原因です。
二つ目はサーバー環境の確認です。mbstring拡張モジュールが正しくインストールされているか、php.iniで正しく設定されているかを確認してください。もし変換がうまくいかない場合は、まずは単純なカタカナ文字列を「mb_convert_kana($str, ‘c’)」で変換するだけのスクリプトを単独で動かし、関数自体が動作する環境か検証するのが最短のデバッグ手法です。
三つ目は辞書の限界です。固有名詞や最新の流行語など、辞書に存在しない単語は正しく読みを取得できません。必要に応じて、Igoの辞書にユーザー独自の辞書(ユーザ辞書)を追加する運用も検討してください。