PHPからkakasiを呼び出す

MySQLで作成したデータベースに対して、日本語の全文検索を行いたいと思い、実現方法を調べました。その結果、次のような方法を行うと出来るらしいということがわかりました。

  • kakasiなどを使用して、検索する文章を分かち書きする
  • 分かち書き結果をバイト単位で16進数に変換して、16進数文字列として検索する

Perlでこのやり方を実現している方のホームページに書かれていることの受け売りです。下記のページにPerlでのやり方が掲載されています。これを参考にして、PHPで行いたいと思います。
MySQLでお気楽全文検索

http://www.hippo2000.info/perl/myfull.htm (消えてしまったようです)

まず、そのために、PHPからkakasiを呼び出す方法を調べました。
PHPからkakasiを呼び出すには、別プロセスと起動する方法と拡張モジュールを作成する方法があります。ここでは、拡張モジュールを作成する方法をとります。

拡張モジュール作成のための下準備

PHPの拡張モジュールを作成するには、PHPのソースコードが必要です。まず、SUSE LinuxのYaSTを使って、ソースコードをダウンロードします。YaSTで、phpを検索します。次に、phpの行の一番右端のカラムにチェックを入れ、ダウンロードします。
ダウンロードされたソースコードとパッチは”/usr/src/packages/SOURCES”にダウンロードされるので、これを適当な作業場所に展開します。私はホームディレクトリを使用しました。

> tar -xjf php-4.3.4.tar.bz2

一緒にダウンロードされたパッチも適用します。

> cd php-4.3.4
> patch -p0 < パッチファイル.patch

拡張モジュール作成

拡張モジュールには、静的に組み込むタイプと動的に組み込むタイプがあるようです。ここでは後者を作成します。まず、PHPのソースディレクトリの”ext”というディレクトリに入ります。

> cd ext

次に、拡張モジュールのひな形を作成します。

>./ext_skel --extname="kakasi"

ひな形が作成されたら、その中の”config.m4″ファイルを編集して、kakasiのライブラリを使用するように編集します。”–with-kakasi”パラメータを有効にするために下記の行の先頭の”dnl”を外します。

dnl PHP_ARG_WITH(kakasi, for kakasi support,
dnl Make sure that the comment is aligned:
dnl [ --with-kakasi Include kakasi support])

kakasiのライブラリとリンクするように、このファイルの下の方で行っているライブラリ検索コードのコメントを外して有効にします。また、検索するヘッダファイル名、ライブラリ名、シンボルを変更します。

...
SEARCH_FOR="/include/libkakasi.h"
...
LIBNAME=kakasi
LIBSYMBOL=kakasi_do

変更が終わったら、”phpize”コマンドを実行して、いくつかのファイルを生成します。

コード編集

PHPから”分かち書き”をするためのコードを作成します。かなり手抜きをして、入力・出力の文字コードは”EUC”限定というものにしました。汎用的には使えませんが、今回の目的ではこれで十分でしたので。。。
コードのダウンロードは下のリンクをクリックしてください。
kakasi.tar.gz
あとは、拡張モジュールをビルドしてインストールします。

> make
> sudo make install

拡張モジュールを使用する

動的に組み込む形で拡張モジュールを使用するときは、使用する各スクリプトファイルでモジュールをロードする必要があります。モジュールは次のようにしてロードします。

...
if(!extension_loaded('kakasi.so'))
{
dl('kakasi.so');
}
...
?>

動作テスト

動作テストとして、下記のようなスクリプトをEUCで保存します。実行結果が”分かち書き”されていればOKです。

if(!extension_loaded('kakasi.so'))
{
dl('kakasi.so');
}
print kakasi_wakati("日本語の分かち書きのテストです。");
?>

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

最近の著書

  1. 基礎から学ぶ SwiftUI

最近の記事