サンプル・プログラムの解説:PHPから KAKASI を呼び出す |
|
|
0028: //形態素解析をしたい文章を渡しつつ、kakasiへのハンドルオープン |
|
|
PHP から KAKASI を呼び出し、本プログラムの中心機能を担っているのが parsing 関数である。 KAKASI には、コマンドライン・オプションを使って様々な機能を提供する。ここでは w オプションを使い、分かち書き(単語に分解)機能を利用させてもらう。 echo コマンドを使って入力データ(日本語テキスト)$str をパイプを使って KAKASI に渡す。コマンドラインで、この処理を実行すると、画面(標準出力)に分解された単語がスペース区切りで出力される。 関数 popen は、実行したコマンドの出力結果を関数 popen で取得できるようにするストリーム関数である。 なお、PHP がセーフモードで動作しているようなサーバ(当サイトもそうである)では、関数 popen の動作が許可されない。この場合は、本プログラムを CGI として動作させる必要がある。具体的には、ソース・ファイルの冒頭行に PHP の実行パス(例 #!/usr/bin/php)を記述し、parsewords.cgi という名前でセーブし、実行権限を与える。これでも動作しない場合は、サーバ管理者と相談してほしい。 |
|
0031: //結果を1行ずつ取得 |
|
関数 popen でオープンしたハンドルから処理結果を順次関数 popen で取り出し(60行目)、区切り文字を指定して配列変数に分解する。
PHP では文字列を添え字とする連想配列が利用できる。配列 $array は単語を添え字とする連想配列とし、出現回数を変数値として登録していく。 |
サンプル・プログラムの解説:結果の表示 |
|
|
0074: //1行ずつ取り出して単語に分解する |
|
|
関数 parsing を呼び出す。 ここでは入力テキストから1行ずつ文字列を取り出すために関数 strtok を利用した。(この処理に関するアドバイスをいただいた jk さんに御礼申し上げます) 処理結果の出力は table 形式にしたが、for ループを使って出現回数の多い順に一覧表示するようにした。 |
質疑応答 |
|
【質問】 さだ様より
このページで公開されているスクリプトを DL させていただき、http://kakasi.namazu.org/ から、kakasi-2.3.4.zip を DL し、テスト環境ということもあり、parsewords.php と同じディレクトリ内に kakasi を設置いたしました。【回答】 まずは、障害の切り分けを行いましょう。 |
|
【質問】 さだ様より
只今アドバイスを頂戴した内容を確認いたしましたところ、【回答】 kakasi をインストールしたディレクトリに空白が含まれていませんか? |
【質問】 さだ様より
アドバイスを頂戴したように、kakasi を C ドライブ直下に設置することで、ポストしたデータがきちんと配列にセットされるまでには至ったのですが、文字化けが出ている状況です。【回答】 Windows の echo コマンドでは、シフト JIS 文字以外を扱うことはできません。 |
参考書籍 |
|
|
|
参考サイト |
|
|
|
|
|
|
|
|
2006年01月29日 作成
2009年04月12日 更新
Copyright by studio pahoo, (C)2009
(※)本ページはリンクフリーですが、複製・転載時にはご一報ください。 ★本ページへのご意見・ご質問・お便りは、ここをクリックしてください。 |