実行例

サンプル・プログラム
textsummary.php | サンプル・プログラム本体 |
準備:各種初期値
textsummary.php
37: //A3RT APIキー
38: //https://a3rt.recruit.co.jp/product/TextSummarizationAPI/registered/ にて登録のこと.
39: define('APIKEY_A3RT', '********************************');
40:
41: //初期値
42: //API呼び出しURL
43: define('REQUEST_TEXT_SUMMARY', 'https://api.a3rt.recruit.co.jp/text_summarization/v1');
44: //表示幅(ピクセル)
45: define('WIDTH', 600);
46: //入力テキスト
47: define('SAMPLE_TEXT','テヘラン南のクムで、シーア派12イマーム派の家に生まれたハサン・サッバーフは、数学・天文学・宗教学を修め、1072年、イスマーイール派の信徒となった。1078年、ファーティマ朝の宮廷に入り、研究活動を行った。その後、イランで布教活動を行い、1090年には、イラン高原のアラムート城砦を攻略して活動拠点とした。ハサンは山の長老と呼ばれることになる。1094年、ファーティマ朝第8代カリフ、アル=ムスタンスィル・ビッラーの死後、カリフの後継者問題で廃嫡となったニザールを支持し、ニザール派としてアラムートに独立政権を打ち立てた。城塞を攻略したり要人を暗殺することでセルジューク朝に対抗し、のちに暗殺教団(アサシン)と呼ばれるようになる。');
取得した APIキー は、定数 APIKEY_A3RT に格納する。

その他の定数は自由に変更可能である。
A3RT:Text Summarization API
URL |
---|
https://api.a3rt.recruit.co.jp/text_summarization/v1 |
フィールド名 | 要否 | 内 容 |
---|---|---|
apikey | 必須 | APIキー 入手手順は前述の通り。無料。 |
sentences | 必須 | 要約する文章 UTF-8エンコード |
linenumber | 任意 | 抽出文章数 1以上の整数で、入力した文章数より少ない数。 デフォルトは1 |
separation | 任意 | 文章の切れ目文字 UTF-8エンコード デフォルトは”。” |
解説:データをPOST渡し
textsummary.php
189: /**
190: * データをPOST渡し
191: * @param string $url リクエストURL
192: * @param array $data POST変数を格納した連想配列("変数名"=>"値")
193: * @return string 取得したコンテンツ/FALSE 取得エラー
194: */
195: function post($url, $data) {
196: //cURL送信
197: $curl = curl_init();
198: curl_setopt($curl, CURLOPT_URL , $url);
199: curl_setopt($curl, CURLOPT_HEADER, 1) ;
200: curl_setopt($curl, CURLOPT_POST, TRUE);
201: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //結果を文字列で
202: curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
203: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
204: curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
205: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
206: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
207: $res1 = @curl_exec($curl);
208: $res2 = @curl_getinfo($curl);
209: curl_close($curl);
210:
211: //結果処理
212: if ($res1 != FALSE) {
213: $json = substr($res1, $res2['header_size']);
214: } else {
215: $json = FALSE;
216: }
217:
218: return $json;
219: }
cURL関数群と、 http_build_query を利用することで実現している。
WebAPIからの応答結果を、JSONテキストでリターンする。
解説:テキスト要約
textsummary.php
221: /**
222: * 「A3RT」を用いてテキストを要約する
223: * @param string $sentence 要約するテキスト
224: * @param string $errmsg エラーメッセージ格納用
225: * @return string 要約結果/FALSE:要約失敗
226: */
227: function text_summary($sentence, &$errmsg) {
228: //抽出文章数は入力文章数の3分の1
229: $count = mb_substr_count($sentence, '。');
230: $count = round($count / 3);
231: if ($count < 1) $count = 1;
232:
233: //WebAPIにパラメータをPOST渡しする
234: $url = REQUEST_TEXT_SUMMARY;
235: $post = array(
236: 'apikey' => APIKEY_A3RT,
237: 'sentences' => $sentence,
238: 'linenumber' => $count,
239: 'separation' => '。'
240: );
241:
242: //要約
243: $res = $errmsg = '';
244: $json = @post($url, $post);
245: $items = json_decode($json);
246:
247: //エラーチェック
248: if ($items == FALSE) {
249: $res = FALSE;
250: $errmsg = 'WebAPIが停止';
251: } else if (isset($items->status)) {
252: if (($items->status == 0) && (isset($items->summary[0]))) {
253: foreach ($items->summary as $ss) {
254: $res .= (string)$ss . '。';
255: }
256: } else {
257: $res = FALSE;
258: $errmsg = (string)$items->message;
259: }
260: }
261:
262: return $res;
263: }
抽出文章数は、入力文章数の3分の1になるようにした。
参考サイト
- Text Summarization API:A3RT
- PHPで日本文の“要約もどき”を行う:ぱふぅ家のホームページ
(2022年2月12日)リクエストURL変更,抽出文章数を設定,PHP8対応,リファラ・チェック改良