サンプル・プログラムの実行例

サンプル・プログラム
YahooKousei.php | サンプル・プログラム本体 |
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
193: /**
194: * 「Yahoo!JAPAN 校正支援Webサービス」を用いてテキストを校正する
195: * @param string $sentence 校正するテキスト
196: * @param array $items 校正結果を格納する配列
197: * @return bool TRUE:成功/FALSE:失敗
198: */
199: function getKousei($sentence, &$items) {
200: $url = YAHOO_KOUSEI_URL;
201: $post = array(
202: 'id' => '1234-1', //ダミー
203: 'jsonrpc' => '2.0', //固定値
204: 'method' => 'jlp.kouseiservice.kousei', //固定値
205: 'params' => array(
206: 'q' => (string)$sentence //対象テキスト
207: )
208: );
209: $json = json_encode($post);
210:
211: //WebAPIにパラメータをPOST渡しする
212: $stream = stream_context_create(array('http' => array(
213: 'header' => "Content-Type: application/json\r\n" .
214: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
215: 'method' => 'POST',
216: 'content' => $json,
217: )));
218:
219: //WebAPIリクエスト
220: $res = file_get_contents($url, FALSE, $stream);
221:
222: if ($res == FALSE) {
223: $this->error = TRUE;
224: $this->errmsg = 'WebAPI error: ' . $url;
225: return FALSE;
226: }
227:
228: //応答を配列へ代入
229: $results = json_decode($res);
230: if (! isset($results->result->suggestions)) return FALSE;
231: $i = 0;
232: foreach ($results->result->suggestions as $suggest) {
233: $items[$i]['word'] = isset($suggest->word) ?
234: (string)$suggest->word : '';
235: $items[$i]['suggestion'] = isset($suggest->suggestion) ?
236: (string)$suggest->suggestion : '';
237: $items[$i]['note'] = isset($suggest->note) ?
238: (string)$suggest->note : '';
239: $items[$i]['rule'] = isset($suggest->rule) ?
240: (string)$suggest->rule : '';
241: $items[$i]['offset'] = isset($suggest->offset) ?
242: (int)$suggest->offset : '';
243: $items[$i]['length'] = isset($suggest->length) ?
244: (int)$suggest->length : '';
245: $i++;
246: }
247:
248: return TRUE;
249: }

WebAPIに渡すパラメータは json_encode 関数によってJSON文字列にエンコードする。
User-Agentとして Yahoo! JAPAN Webサービス アプリケーションID を渡すために、 stream_context_create 関数を使ってストリームコンテキストを用意し、 file_get_contents 関数を使って応答JSON文を取得する。

応答JSON文は json_decode 関数を使って連想配列にデコードし、配列 $items へ格納していく。
解説:校正結果をテキストに反映
YahooKousei.php
251: /**
252: * 校正結果をテキストに反映する
253: * @param string $sentence 校正するテキスト
254: * @param array $items 校正結果を格納した配列
255: * @return string 校正結果
256: */
257: function setKousei($sentence, $items) {
258: $outstr = '';
259: $pos = 0;
260:
261: foreach ($items as $val) {
262: if ($pos <= $val['offset']) {
263: $s = mb_substr($sentence, $pos, $val['offset'] - $pos);
264: $outstr .= $s;
265: $s = mb_substr($sentence, $val['offset'], $val['length']);
266: $outstr .= "<span style=\"color:red;\">{$s}</span>";
267: $s = " <span style=\"font-size:70%; color:blue;\">▼{$val['rule']}{$val['note']}";
268: if ($val['suggestion'] != '') {
269: $s .= "⇒{$val['suggestion']}";
270: }
271: $s .= "▼</span> ";
272: $outstr .= $s;
273: $pos = $val['offset'] + $val['length'];
274: }
275: }
276:
277: if (mb_strlen($sentence) > $pos) {
278: $s = mb_substr($sentence, $pos, mb_strlen($sentence) - $pos);
279: $outstr .= $s;
280: }
281:
282: return nl2br($outstr);
283: }
参考サイト
- Yahoo!JAPAN 校正支援(V2)
- PHPでテキストにルビを振る:ぱふぅ家のホームページ
(2021/10/02)現行WebAPIが2022年1月末に終了することから校正支援(V2)に変更。PHP8対応,その他。