サンプル・プログラムの実行例
目次
サンプル・プログラム
| YahooParse.php | サンプル・プログラム本体。 |
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.4.0 | 2025/09/06 | .pahooEnv導入 |
| 2.3.0 | 2023/03/18 | 日本語形態素解析v2に対応 |
| 2.2 | 2021/10/02 | PHP8対応,リファラ・チェック改良,https対応 |
| 2.1 | 2017/04/30 | PHP7対応 |
| 2.0 | 2014/07/26 | 大幅改訂 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.0.1 | 2025/08/11 | getParam() bug-fix |
| 2.0.0 | 2025/08/11 | pahooLoadEnv() 追加 |
| 1.9.0 | 2025/07/26 | getParam() 引数に$trim追加 |
| 1.8.1 | 2025/03/15 | validRegexPattern() debug |
| 1.8.0 | 2024/11/12 | validRegexPattern() 追加 |
準備:PHP の https対応
Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dllLinuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順
これで準備は完了だ。
準備:pahooInputData 関数群
また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .pahooEnv ファイルから読み込む関数 pahooLoadEnv を備えている。こちらについては、「各種クラウド連携サービス(WebAPI)の登録方法」をご覧いただきたい。
準備:各種定数など
YahooParse.php
54: // 各種定数(START) ===========================================================
55:
56: // 表示幅(ピクセル)
57: define('WIDTH', 600);
58:
59: // Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
60: // 取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
61: if (isset($_ENV['PAHOO_YAHOO_APPLICATION_ID'])) {
62: define('YAHOO_APPLICATION_ID', $_ENV['PAHOO_YAHOO_APPLICATION_ID']);
63: } else {
64: define('YAHOO_APPLICATION_ID', '');
65: }
66:
67: // リクエストURL【変更不可】
68: define('YAHOO_MAService_URL', 'https://jlp.yahooapis.jp/MAService/V2/parse');
69:
70: // 解析テキスト(初期値)
71: define('DEF_SOUR', "Yahoo!JAPANの「日本語形態素解析」は、日本語文を形態素に分割し、品詞、読みがななどの情報を取得できるWebAPIである。\nサーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。");
72:
73: // 各種定数(END) ===============================================================
「日本語形態素解析」を利用するためには、Yahoo! JAPAN Webサービス アプリケーションID を取得する必要がある。その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を参照されたい。取得したIDは .pahooEnv ファイルに記入するか、定数 YAHOO_APPLICATION_ID に格納する。
「Yahoo!JAPAN 日本語形態素解析」による形態素解析
| URL |
|---|
| https://jlp.yahooapis.jp/MAService/V2/parse |
| フィールド名 | 要否 | 内 容 | |
|---|---|---|---|
| id | 必須 | JSON-RPC 2.0のid。値は任意で、指定した値がレスポンスのidに返る。 | |
| jsonrpc | 必須 | "2.0" 固定。 | |
| method | 必須 | "jlp.maservice.parse" 固定。 | |
| params | q | 必須 | 解析対象のテキスト。UTF-8エンコード。 |
解説:準備
YahooParse.php
56: // 表示幅(ピクセル)
57: define('WIDTH', 600);
58:
59: // Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
60: // 取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
61: if (isset($_ENV['PAHOO_YAHOO_APPLICATION_ID'])) {
62: define('YAHOO_APPLICATION_ID', $_ENV['PAHOO_YAHOO_APPLICATION_ID']);
63: } else {
64: define('YAHOO_APPLICATION_ID', '');
65: }
66:
67: // リクエストURL【変更不可】
68: define('YAHOO_MAService_URL', 'https://jlp.yahooapis.jp/MAService/V2/parse');
69:
70: // 解析テキスト(初期値)
71: define('DEF_SOUR', "Yahoo!JAPANの「日本語形態素解析」は、日本語文を形態素に分割し、品詞、読みがななどの情報を取得できるWebAPIである。\nサーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。");
取得したIDは定数 YAHOO_APPLICATION_ID に格納する。
解説:日本語形態素解析
YahooParse.php
170: /**
171: * 「Yahoo 日本語形態素解析」を用いてテキストを解析する.
172: * @param string $sentence 解析するテキスト
173: * @param array $items 解析結果を格納する配列
174: * @return bool TRUE/FALSE
175: */
176: function getParse($sentence, &$items) {
177: // WebAPIにパラメータをPOST渡しする
178: $url = YAHOO_MAService_URL;
179: $post = array(
180: 'id' => '1234-1', // ダミー
181: 'jsonrpc' => '2.0', // 固定値
182: 'method' => 'jlp.maservice.parse', // 固定値
183: 'params' => array(
184: 'q' => (string)$sentence // 対象テキスト
185: )
186: );
187: $json = json_encode($post);
188:
189: // WebAPIにパラメータをPOST渡しする
190: $stream = stream_context_create(array('http' => array(
191: 'header' => "Content-Type: application/json\r\n" .
192: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
193: 'method' => 'POST',
194: 'content' => $json,
195: )));
196:
197: // WebAPIリクエスト
198: $res = file_get_contents($url, FALSE, $stream);
199:
200: if ($res == FALSE) {
201: $this->error = TRUE;
202: $this->errmsg = 'WebAPI error: ' . $url;
203: return FALSE;
204: }
205:
206: // 応答を配列へ代入する.
207: $results = json_decode($res);
208: // エラー処理
209: if (isset($results->error)) {
210: $this->error = TRUE;
211: $this->errmsg = 'WebAPI error: ' . $results->error->message;
212: }
213:
214: // 応答データを処理する.
215: foreach ($results->result->tokens as $token) {
216: $key = (string)$token[0]; // 形態素
217: // 初めて登場する形態素を登録する.
218: if (! isset($items[$key])) {
219: $items[$key]['reading'] = (string)$token[1]; // 読みがな
220: $items[$key]['pos'] = (string)$token[3]; // 品詞
221: $items[$key]['count'] = 1; // 出現回数
222: // 2回目以降は出現回数をインクリメントする.
223: } else {
224: $items[$key]['count']++;
225: }
226: }
227:
228: return TRUE;
229: }
組み込み関数 stream_context_create を用いてパラメータをPOST渡しし、 file_get_contents でリクエストし、レスポンスを json_decode でデコードする。
解析された単語は配列変数 $items に格納する。このとき、同じ形態素は出現回数をカウントし、要素 'count' に格納する。
参考サイト
- 日本語形態素解析
- PHPで2つの文章の類似度を計算する(WebAPI版):ぱふぅ家のホームページ

サーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。
(2025年9月6日).pahooEnv導入