PHPで文書校正を支援する

(1/1)
Yahoo!JAPANの「校正支援(V2)」は、日本語文書に対して、文字の入力ミスや言葉の誤用がないか、わかりにくい表記や不適切な表現が使われていないかなどをチェックするWebAPIである。

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

目次

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

PHPで文書校正を支援する

サンプル・プログラム

圧縮ファイルの内容
YahooKousei.phpサンプル・プログラム本体
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
YahooKousei.php 更新履歴
バージョン 更新日 内容
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 大幅改訂
pahooInputData.php 更新履歴
バージョン 更新日 内容
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対応

クラウド連携や相手先サイトのデータを読み込むのに https通信を使うため、PHPに OpenSSLモジュールが組み込まれている必要がある。関数  phpinfo  を使って、下図のように表示されればOKだ。
OpenSSL - PHP
そうでない場合は、次の手順に従ってOpenSSLを有効化し、PHPを再起動させる必要がある。

Windowsでは、"php.ini" の下記の行を有効化する。
extension=php_openssl.dll
Linuxでは --with-openssl=/usr オプションを付けて再ビルドする。→OpenSSLインストール手順

これで準備は完了だ。

準備:pahooInputData 関数群

PHPのバージョンや入力データのバリデーションなど、汎用的に使う関数群を収めたファイル "pahooInputData.php" が同梱されているが、include_path が通ったディレクトリに配置してほしい。他のプログラムでも "pahooInputData.php" を利用するが、常に最新のファイルを1つ配置すればよい。

また、各種クラウドサービスに登録したときに取得するアカウント情報、アプリケーションパスワードなどを登録した .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) ===============================================================

各種パラメータは定数を define している。とくに変更不可の記載のないものは、自由に変更してかまわない。

日本語形態素解析」を利用するためには、Yahoo! JAPAN Webサービス アプリケーションID を取得する必要がある。その入手方法は「Yahoo!JAPAN デベロッパーネットワーク - WebAPIの登録方法」を参照されたい。取得したIDは .pahooEnv ファイルに記入するか、定数 YAHOO_APPLICATION_ID に格納する。

Yahoo!JAPAN 校正支援(V2)

校正支援(V2)は、入力パラメータとしてJSON文字列をPOSTで、User-Agentに Yahoo! JAPAN Webサービス アプリケーションID を指定し、出力結果がJSONで戻るというWebAPIである。
WebAPIのURL
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エンコード。
応答データ構造(json) id id jsonrpc 2.0 result suggestions word 指摘対象 suggestion 指摘対象の置換先候補(空の場合あり) note 指摘の補足情報(空の場合あり) rule 指摘理由 offset マッチした部分の始まりの位置 length マッチした部分の長さ suggestions word 指摘対象 suggestion 指摘対象の置換先候補(空の場合あり) note 指摘の補足情報(空の場合あり) rule 指摘理由 offset マッチした部分の始まりの位置 length マッチした部分の長さ

解説:テキストを校正する

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を呼び出して結果を受け取るのはユーザー関数 getKousei である。結果は配列変数 $items に格納する。

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 = "&nbsp;<span style=\"font-size:70%; color:blue;\">▼{$val['rule']}{$val['note']}";
 251:             if ($val['suggestion'!'') {
 252:                 $s ."⇒{$val['suggestion']}";
 253:             }
 254:             $s ."▼</span>&nbsp;";
 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: }

ユーザー関数 getRuby で得た配列変数 $items をもとに構成結果をHTMLタグに変換して付加するのがユーザー関数 setKousei である。

参考サイト

(この項おわり)
header