目次
サンプル・プログラムの実行例
サンプル・プログラム
| YahooKousei.php | サンプル・プログラム本体 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 3.1.0 | 2025/09/06 | .pahooEnv導入 |
| 3.0 | 2021/10/02 | 校正(V2)に変更,PHP8対応,リファラチェック改良 |
| 2.2 | 2020/07/11 | http(): each()関数をforeachで代替:PHP7.2対応, ini_set('display_errors', 1) 追加 |
| 2.1 | 2017/04/30 | PHP7 対応 |
| 2.0 | 2014/07/27 | 大幅改訂 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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)の登録方法」をご覧いただきたい。
準備:各種定数など
YahooKousei.php
53: // 各種定数(START) ===========================================================
54:
55: // 表示幅(ピクセル)
56: define('WIDTH', 600);
57:
58: // Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
59: // 取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
60: if (isset($_ENV['PAHOO_YAHOO_APPLICATION_ID'])) {
61: define('YAHOO_APPLICATION_ID', $_ENV['PAHOO_YAHOO_APPLICATION_ID']);
62: } else {
63: define('YAHOO_APPLICATION_ID', '************************************');
64: }
65:
66: // リクエストURL【変更不可】
67: define('YAHOO_KOUSEI_URL', 'https://jlp.yahooapis.jp/KouseiService/V2/kousei');
68:
69: // サンプル・テキスト
70: define('SAMPLE_TEXT', '彼女はシュミレーションゲームをしながらジュースを飲んでいるが、食事を食べれないとは言っていない。');
71:
72: // 各種定数(END) ===============================================================
「日本語形態素解析」を利用するためには、Yahoo! JAPAN Webサービス アプリケーションID を取得する必要がある。その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を参照されたい。取得したIDは .pahooEnv ファイルに記入するか、定数 YAHOO_APPLICATION_ID に格納する。
Yahoo!JAPAN 校正支援(V2)
| URL |
|---|
| https://jlp.yahooapis.jp/KouseiService/V2/kousei |
| フィールド名 | 要否 | 内 容 | |
|---|---|---|---|
| id | 必須 | JSON-RPC 2.0のid。値は任意で、指定した値がレスポンスのidに返る。 | |
| jsonrpc | 必須 | "2.0" 固定。 | |
| method | 必須 | "jlp.kouseiservice.kousei" 固定。 | |
| params | q | 必須 | 校正対象のテキスト。UTF-8エンコード。 |
解説:テキストを校正する
YahooKousei.php
176: /**
177: * 「Yahoo!JAPAN 校正支援Webサービス」を用いてテキストを校正する
178: * @param string $sentence 校正するテキスト
179: * @param array $items 校正結果を格納する配列
180: * @return bool TRUE:成功/FALSE:失敗
181: */
182: function getKousei($sentence, &$items) {
183: $url = YAHOO_KOUSEI_URL;
184: $post = array(
185: 'id' => '1234-1', // ダミー
186: 'jsonrpc' => '2.0', // 固定値
187: 'method' => 'jlp.kouseiservice.kousei', // 固定値
188: 'params' => array(
189: 'q' => (string)$sentence // 対象テキスト
190: )
191: );
192: $json = json_encode($post);
193:
194: // WebAPIにパラメータをPOST渡しする
195: $stream = stream_context_create(array('http' => array(
196: 'header' => "Content-Type: application/json\r\n" .
197: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
198: 'method' => 'POST',
199: 'content' => $json,
200: )));
201:
202: // WebAPIリクエスト
203: $res = file_get_contents($url, FALSE, $stream);
204:
205: if ($res == FALSE) {
206: $this->error = TRUE;
207: $this->errmsg = 'WebAPI error: ' . $url;
208: return FALSE;
209: }
210:
211: // 応答を配列へ代入
212: $results = json_decode($res);
213: if (! isset($results->result->suggestions)) return FALSE;
214: $i = 0;
215: foreach ($results->result->suggestions as $suggest) {
216: $items[$i]['word'] = isset($suggest->word) ?
217: (string)$suggest->word : '';
218: $items[$i]['suggestion'] = isset($suggest->suggestion) ?
219: (string)$suggest->suggestion : '';
220: $items[$i]['note'] = isset($suggest->note) ?
221: (string)$suggest->note : '';
222: $items[$i]['rule'] = isset($suggest->rule) ?
223: (string)$suggest->rule : '';
224: $items[$i]['offset'] = isset($suggest->offset) ?
225: (int)$suggest->offset : '';
226: $items[$i]['length'] = isset($suggest->length) ?
227: (int)$suggest->length : '';
228: $i++;
229: }
230:
231: return TRUE;
232: }
WebAPIに渡すパラメータは json_encode 関数によってJSON文字列にエンコードする。
User-Agentとして Yahoo! JAPAN Webサービス アプリケーションID を渡すために、 stream_context_create 関数を使ってストリームコンテキストを用意し、 file_get_contents 関数を使って応答JSON文を取得する。
応答JSON文は json_decode 関数を使って連想配列にデコードし、配列 $items へ格納していく。
解説:校正結果をテキストに反映
YahooKousei.php
234: /**
235: * 校正結果をテキストに反映する
236: * @param string $sentence 校正するテキスト
237: * @param array $items 校正結果を格納した配列
238: * @return string 校正結果
239: */
240: function setKousei($sentence, $items) {
241: $outstr = '';
242: $pos = 0;
243:
244: foreach ($items as $val) {
245: if ($pos <= $val['offset']) {
246: $s = mb_substr($sentence, $pos, $val['offset'] - $pos);
247: $outstr .= $s;
248: $s = mb_substr($sentence, $val['offset'], $val['length']);
249: $outstr .= "<span style=\"color:red;\">{$s}</span>";
250: $s = " <span style=\"font-size:70%; color:blue;\">▼{$val['rule']}{$val['note']}";
251: if ($val['suggestion'] != '') {
252: $s .= "⇒{$val['suggestion']}";
253: }
254: $s .= "▼</span> ";
255: $outstr .= $s;
256: $pos = $val['offset'] + $val['length'];
257: }
258: }
259:
260: if (mb_strlen($sentence) > $pos) {
261: $s = mb_substr($sentence, $pos, mb_strlen($sentence) - $pos);
262: $outstr .= $s;
263: }
264:
265: return nl2br($outstr);
266: }
参考サイト
- Yahoo!JAPAN 校正支援(V2)
- PHPでテキストにルビを振る:ぱふぅ家のホームページ

(2025年9月6日).pahooEnv導入