WordPressに辞書検索機能を拡張する裏技を公開!Igoの形態解析でキーワードを品詞分解する!
WordPressには標準でサイト内検索ができる機能がありますよね。
テンプレートフォルダ内のsearch.phpとsearchform.phpを使えば
簡単に実装することができると思います。
検索キーワードを詳細に設定する場合、
AND条件やOR条件を考慮し、最適な検索方法を検討すると思います。
主にfunctions.php内を編集し、作りこまないといけないですよね。
意外と検索ロジックを作成するだけで大変だったりします。
そこで、WordPressで辞書ツールなど利用し、高度な検索機能を実装できないか調べましたが、
プラグインどころか全く情報がありませんでした。
そこで、PHPに対応した辞書プラグインを独自に組み込み、強力な検索機能を実装しました。
WordPressに辞書検索アルゴリズムを実装する
意外とありそうでなかったWordPressの辞書検索機能。
今回私が利用した辞書ツールは「Igo」というものです。
Igoって何?
IgoとはJavaで開発された形態素解析エンジンのことです。
例えば、以下の文字列があった場合、
1 | WordPressで辞書検索をする |
Igoを利用することで、
1 | WordPress | で | 辞書 | 検索 | を | する |
という具合に形態素解析によって品詞分解することができます。
JavaはJVMという閉鎖空間で動作するため、他の言語やアプリとの連携時の安定性がいまいち。
特に形態素解析を行う際、Java製のものを利用するケースが多く
この「Igo」も選択肢のひとつです。
IgoはJava言語に主に利用される辞書ライブラリです。
また、IgoはJavaのjarファイル1個で動作するという利便性があります。
IgoをPHPで利用する方法
IgoはJava専用の辞書ツールですが、php用に変換することもできます。
igo-phpという便利なものがあり、phpで利用できるファイルに構築が可能です。
主に必要なものは、以下の通りです。
Igoをphp専用に変換する作業がやや面倒なので、慎重に行なって下さい。
次のページから実装をしていきます。
Igoをphp形式に変換する方法!
WordPressに辞書検索機能を実装する前に、Igoをphp専用に変換します。
変換にはJava Development Kit(JDK)と呼ばれるJavaプログラムが必要なので、
インストールされていない方は、こちらからインストールお願いします。
igo-phpでMeCab辞書を利用する
igo-phpには辞書ファイルが付属されていないので、辞書機能を使用するにはMeCabという辞書を利用します。
こちらから辞書ファイルをダウンロードします。
ダウンロードしたら、ファイルを解凍します。
Cドライブ直下にigoというフォルダを作成し、その中に解凍したファイルを移動させます。
1 | C:\igo\mecab-ipadic-2.7.0-20070801\[各種ファイル] |
Igoをコンソールからphp形式に変換する
次にIgo本体プログラムを利用し、コンソール上でphp専用ファイルに変換します。
Igo本体をこちら(現時点ではigo-0.4.5.jar)からをダウンロードします。
jarファイルのみをダウンロードして下さいね。
ダウンロードが完了したら、先ほど作成したCドライブ直下のigoフォルダに移動させます。
1 | C:\igo-0.4.5.jar |
コマンドプロンプトを実行し、以下のコマンドを実行して下さい。
1 2 | cd C:\igo java -Xmx1024m -cp C:\igo-0.4.5.jar net.reduls.igo.bin.BuildDic ipadic mecab-ipadic-2.7.0-20070801 EUC-JP |
このコマンドを実行することで、phpファイルへの変換が開始されます。
しばらく時間がかかるので気長に待ちましょう。
尚、javaコマンドを利用するには「JDK」が必要です。
コマンドが利用できない場合は「JDK」のインストールができていないか、その設定に不備があると思います。
WordPressに辞書検索機能を実装する
phpへの変換が完了すると、Cドライブ直下のigoフォルダ内に、
「ipadic」というフォルダが出来上がっていると思います。
このフォルダが辞書ツール本体になります。
ipadicとigo-phpをWordPress内に配置する
それではipadicを運用しているWordPressサイトのディレクトリにコピーします。
移動させる場所ですが、「wp-content」フォルダがあるフォルダ階層に配置させます。
WordPressのルートディレクトリで大丈夫だと思います。
次にigo-phpをこちらからダウンロードしましょう。
ダウンロードが完了したら、ファイルを解凍します。
その中に入っているlibフォルダをまるごと、WordPressで利用しているテーマの
ディレクトリに移動させましょう。
1 | /wordpress/wp-content/themes/[テーマフォルダ]/lib |
上記のようなパスに配置します。
サイト内検索に辞書検索機能を付与する
次にfunctuions.phpに以下を追記して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | //検索ワードが存在する&検索ページ内でのみ有効 if(isset($_GET['s']) && strstr(home_url(), dirname($_SERVER["REQUEST_URI"])) ){ //半角カタカナを全角に変換 $_GET['s']=mb_convert_kana($_GET['s'],'KVa','UTF-8'); //igo-phpプログラムをロード require_once 'lib/Igo.php'; //Igoクラスのインスタンス $igo = new Igo(getcwd()."/ipadic", "UTF-8"); $text = $_GET['s']; //検索ワードを品詞分解 $result = $igo->wakati($text); //配列化された文字列にスペースを付与し連結 $_GET['s'] = implode(' ', $result); } // 検索ワードが空の場合はトップページにリダイレクトする if (isset($_GET['s']) && empty($_GET['s'])) { wp_redirect( home_url( '/' ) ); //リダイレクト exit; } /** 検索文字列に対してOR条件に置換する. */ add_filter( 'posts_search', 'search_for_title' ); function search_for_title( $search ) { return str_replace(')) AND ((', ')) OR ((', $search); } |
上記を追記することで辞書検索機能を付加できます。
仕組み的には、1つ目のソースは、
検索フォームでスペース区切りでキーワード検索時に、OR条件を有効化するものです。
2つ目のソースは、
igo-phpを実行し、検索キーワードを単語ごとに品詞分解します。
品詞分解された単語は配列で返ってきます。
最後にスペース区切りで1つの文字として連結させてあげて、
その文字列を検索ワードとして設定するプログラムです。
igoが正常に動作しない時は
fopenエラーが出る場合は、ソースコードの以下の部分を調整して下さい。
1 | $igo = new Igo(getcwd()."/ipadic", "UTF-8"); |
getcwd() . “/ipadic”の部分は辞書ツールが配置されているフォルダパスになります。
WordPressサイトの環境によっては、読み込みがうまくできない場合があるので、
環境に合わせて、パスの記述を変更するか、辞書ツールの配置を変えるか対応して下さい。
あとはプラグインで「WP Multibyte Patch」を有効してないなと、正しく動作しない場合があります。
プログラム使用上の注意
この記事の手順で実装したプログラムで万一不具合が発生するなどの問題が
起きてもサイト運営者はその責任を負わないこととします。
すべて自己責任でご利用下さい。
最新記事 by よっき (全て見る)
- 「圧着」と「圧接」の違い!コネクタを使った効率的な配線作業! - 2019年10月26日
- 夏の暑さ対策は大丈夫?冷却性能抜群のおすすめCPUクーラー!メモリに干渉しない最強の商品を紹介! - 2018年5月1日
- 自作PC弐号機のケースを換装!SilverStone製のミニタワーで冷却性とかっこよさを追求! - 2018年3月11日
スポンサードリンク
こちらの記事もどうぞ!
記事公開日:2015年4月4日
最終更新日:2016年6月20日