目次
サンプル・プログラムの実行例
サンプル・プログラム
| pseudodigest.php | サンプル・プログラム本体。 |
| .pahooEnv | クラウドサービスを利用するためのアカウント情報などを記入する .env ファイル。 使い方は「各種クラウド連携サービス(WebAPI)の登録方法」を参照。include_path が通ったディレクトリに配置すること。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 2.1.0 | 2025/09/15 | .pahooEnv導入 |
| 2.0 | 2022/01/29 | 日本語係り受け解析V2対応,PHP8対応,リファラ・チェック改良 |
| 1.1 | 2017/03/25 | PHP7対応 |
| 1.0 | 2014/06/14 | 初版 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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)の登録方法」をご覧いただきたい。
日本語係り受け解析
| URL |
|---|
| https://jlp.yahooapis.jp/DAService/V2/parse |
| フィールド名 | 要否 | 内 容 | |
|---|---|---|---|
| id | 必須 | JSON-RPC 2.0のid。値は任意で、指定した値がレスポンスのidに返る。 | |
| jsonrpc | 必須 | "2.0" 固定。 | |
| method | 必須 | "jlp.daservice.parse" 固定。 | |
| params | q | 必須 | 解析対象のテキスト。解析可能な単位は1文のみ。 |
準備:アプリケーションIDなど
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) ===============================================================
取得したIDは、ファイル [.pahooEnv] または本プログラムの定数 APPLICATION_ID に格納する。
その他、変更不可と記載のない定数は任意に変更して構わない。
解説:テキストの分解
pseudodigest.php
235: /**
236: * 複数文要約インターフェース
237: * @param string $sentence 要約するテキスト
238: * @return string 要約もどき
239: */
240: function pseudodigest($sentence) {
241: $arr = mb_split("[。.]", $sentence);
242: $pseudodigest = '';
243: foreach ($arr as $str) {
244: if ($str == '') continue;
245: if (($res = pseudodigest_sub($str . '。')) == FALSE) return FALSE;
246: $pseudodigest .= $res;
247: }
248:
249: return $pseudodigest;
250: }
解説:要約もどき
pseudodigest.php
171: /**
172: * 「Yahoo!JAPAN 日本語係り受け解析」を用いて日本文を要約する
173: * @param string $sentence 要約するテキスト(1文)
174: * @return string 要約もどき/FALSE:WebAPIエラー
175: */
176: function pseudodigest_sub($sentence) {
177: // WebAPIにパラメータをPOST渡しする
178: $url = REQUEST_KAKARIUKE_URL;
179: $post = array(
180: 'id' => '1234-1', // ダミー
181: 'jsonrpc' => '2.0', // 固定値
182: 'method' => 'jlp.daservice.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: if ($res == FALSE) return FALSE;
200:
201: // 応答を配列へ代入
202: $results = json_decode($res);
203: if (! isset($results->result->chunks)) return FALSE;
204: $cnt = 0;
205: foreach ($results->result->chunks as $chunk) {
206: $head = isset($chunk->head) ? (int)$chunk->head : (-1);
207: $id = isset($chunk->id) ? (int)$chunk->id : (-1);
208: $phrase = '';
209: foreach ($chunk->tokens as $token) {
210: $phrase .= (string)$token[0];
211: }
212: $items[$id]['head'] = $head;
213: $items[$id]['phrase'] = $phrase;
214: }
215:
216: // 要約
217: $base = '';
218: foreach ($items as $id=>$item) {
219: if ($item['head'] < 0) {
220: $base = $item['phrase'];
221: break;
222: }
223: }
224: $pseudodigest = '';
225: foreach ($items as $item) {
226: if ($item['head'] == $id) {
227: $pseudodigest = $pseudodigest . $item['phrase'];
228: }
229: }
230: $pseudodigest .= $base;
231:
232: return $pseudodigest;
233: }
前半で日本語係り受け解析を呼び出し、文節番号をキーに、修飾番号と表記を配列 $items に格納する。
後半が要約もどきの処理である。
修飾番号が無い(-1 が格納されている)文節がベースとなる述語である。これを探しだし、それを修飾している文節を並べる。
参考サイト
- 日本語係り受け解析:Yahoo!JAPAN デベロッパーネットワーク
- PHPでキーフレーズを取り出す:ぱふぅ家のホームページ

今回は、Yahoo!JAPANの「https://developer.yahoo.co.jp/webapi/jlp/da/v2/parse.html:title=日本語係り受け解析]」を利用し、ベースとなる述語と、それを修飾する文節を取り出すことで、“要約もどき”を行ってみることにする。
(2025年9月15日).pahooEnv導入