サンプル・プログラムの実行例
サンプル・プログラム
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エンコード。 |
解説:テキストを校正する
0193: /**
0194: * 「Yahoo!JAPAN校正支援Webサービス」を用いてテキストを校正する
0195: * @param string $sentence校正するテキスト
0196: * @param array $items 校正結果を格納する配列
0197: * @return bool TRUE:成功/FALSE:失敗
0198: */
0199: function getKousei($sentence, &$items) {
0200: $url = YAHOO_KOUSEI_URL;
0201: $post = array(
0202: 'id' => '1234-1', //ダミー
0203: 'jsonrpc' => '2.0', //固定値
0204: 'method' => 'jlp.kouseiservice.kousei', //固定値
0205: 'params' => array(
0206: 'q' => (string)$sentence //対象テキスト
0207: )
0208: );
0209: $json = json_encode($post);
0210:
0211: //WebAPIにパラメータをPOST渡しする
0212: $stream = stream_context_create(array('http' => array(
0213: 'header' => "Content-Type: application/json\r\n" .
0214: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
0215: 'method' => 'POST',
0216: 'content' => $json,
0217: )));
0218:
0219: //WebAPIリクエスト
0220: $res = file_get_contents($url, FALSE, $stream);
0221:
0222: if ($res == FALSE) {
0223: $this->error = TRUE;
0224: $this->errmsg = 'WebAPI error: ' . $url;
0225: return FALSE;
0226: }
0227:
0228: //応答を配列へ代入
0229: $results = json_decode($res);
0230: if (! isset($results->result->suggestions)) return FALSE;
0231: $i = 0;
0232: foreach ($results->result->suggestions as $suggest) {
0233: $items[$i]['word'] = isset($suggest->word) ?
0234: (string)$suggest->word : '';
0235: $items[$i]['suggestion'] = isset($suggest->suggestion) ?
0236: (string)$suggest->suggestion : '';
0237: $items[$i]['note'] = isset($suggest->note) ?
0238: (string)$suggest->note : '';
0239: $items[$i]['rule'] = isset($suggest->rule) ?
0240: (string)$suggest->rule : '';
0241: $items[$i]['offset'] = isset($suggest->offset) ?
0242: (int)$suggest->offset : '';
0243: $items[$i]['length'] = isset($suggest->length) ?
0244: (int)$suggest->length : '';
0245: $i++;
0246: }
0247:
0248: return TRUE;
0249: }
WebAPIに渡すパラメータは json_encode 関数によってJSON文字列にエンコードする。
User-Agentとして Yahoo! JAPAN Webサービス アプリケーションID を渡すために、 stream_context_create 関数を使ってストリームコンテキストを用意し、 file_get_contents 関数を使って応答JSON文を取得する。
応答JSON文は json_decode 関数を使って連想配列にデコードし、配列 $items へ格納していく。
解説:校正結果をテキストに反映
0251: /**
0252: * 校正結果をテキストに反映する
0253: * @param string $sentence校正するテキスト
0254: * @param array $items 校正結果を格納した配列
0255: * @return string校正結果
0256: */
0257: function setKousei($sentence, $items) {
0258: $outstr = '';
0259: $pos = 0;
0260:
0261: foreach ($items as $val) {
0262: if ($pos <= $val['offset']) {
0263: $s = mb_substr($sentence, $pos, $val['offset'] - $pos);
0264: $outstr .= $s;
0265: $s = mb_substr($sentence, $val['offset'], $val['length']);
0266: $outstr .= "<span style=\"color:red;\">{$s}</span>";
0267: $s = " <span style=\"font-size:70%; color:blue;\">▼{$val['rule']}{$val['note']}";
0268: if ($val['suggestion'] != '') {
0269: $s .= "⇒{$val['suggestion']}";
0270: }
0271: $s .= "▼</span> ";
0272: $outstr .= $s;
0273: $pos = $val['offset'] + $val['length'];
0274: }
0275: }
0276:
0277: if (mb_strlen($sentence) > $pos) {
0278: $s = mb_substr($sentence, $pos, mb_strlen($sentence) - $pos);
0279: $outstr .= $s;
0280: }
0281:
0282: return nl2br($outstr);
0283: }
参考サイト
- Yahoo!JAPAN 校正支援(V2)
- PHPでテキストにルビを振る:ぱふぅ家のホームページ
(2021/10/02)現行WebAPIが2022年1月末に終了することから校正支援(V2)に変更。PHP8対応,その他。