SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

文章の中のはてなキーワードをハイライトさせる

目的に応じて適材適所で使うPHPライブラリ(5)

新着キーワードの辞書ファイル作成とMeCab辞書の再インストール

 前項で取得した新着キーワードでMeCabの辞書を作成します。MeCabの辞書ファイルはMeCabインストール時にIPA辞書ファイルを展開したディレクトリにできた文字コードEUCのcsvファイルになります。

 辞書ファイルの詳しい書式はMeCab本家サイトの単語の追加方法を参照ください。インストールした辞書ファイルの書式は次のようになっています。

Noun.place.csv(抜粋)
原村,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ドキュメントに準じて行ってください。

Noun.place.csv(抜粋)
[新着キーワード],-1,-1,10,名詞,固有名詞,キーワード,*,*,*,*,[新着キーワード],[新着キーワード],はてなキーワード

 辞書ファイルはPHPでテーブル内のデータを読み込んで作成します。

keyword_dic.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辞書ファイルを展開したディレクトリへコピーして以下のコマンドで辞書を再インストールします。

IPA辞書の再インストール
# make clean all
# make install

 辞書ファイルの再インストール後は、新着キーワードがmecabコマンドで形態素解析できているか確認します。例えば、新着キーワードの1つ「オタク中野要塞」という単語をMeCabが認識しているか確認してみます。

 辞書ファイルの再インストール前はこのような結果でした。

IPA辞書の再インストール前の実行結果
# mecab
オタク中野要塞
オタク  名詞,一般,*,*,*,*,オタク,オタク,オタク
中野    名詞,固有名詞,地域,一般,*,*,中野,ナカノ,ナカノ
要塞    名詞,一般,*,*,*,*,要塞,ヨウサイ,ヨーサイ
EOS

 辞書ファイル再インストール後に同じように形態素解析を実行します。

IPA辞書の再インストール後の実行結果
# mecab
オタク中野要塞
オタク中野要塞  名詞,固有名詞,キーワード,*,*,*,*,オタク中野要塞,オタク中野要塞,はてなキーワード
EOS

 「オタク中野要塞」という単語が正しく認識され、登録した辞書ファイルの通りに結果が表示されていることを確認します。

次のページ
HTML内の文章を形態素解析し、新着キーワードのハイライトを行う

この記事は参考になりましたか?

目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4991 2010/03/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー