実行例
サンプル・プログラム
textsummary.php | サンプル・プログラム本体 |
準備:各種初期値
0037: //A3RT APIキー
0038: //https://a3rt.recruit.co.jp/product/TextSummarizationAPI/registered/ にて登録のこと.
0039: define('APIKEY_A3RT', '********************************');
0040:
0041: //初期値
0042: //API呼び出しURL
0043: define('REQUEST_TEXT_SUMMARY', 'https://api.a3rt.recruit.co.jp/text_summarization/v1');
0044: //表示幅(ピクセル)
0045: define('WIDTH', 600);
0046: //入力テキスト
0047: 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渡し
0189: /**
0190: * データをPOST渡し
0191: * @param string $urlリクエストURL
0192: * @param array $data POST変数を格納した連想配列("変数名"=>"値")
0193: * @return string取得したコンテンツ/FALSE取得エラー
0194: */
0195: function post($url, $data) {
0196: //cURL送信
0197: $curl = curl_init();
0198: curl_setopt($curl, CURLOPT_URL , $url);
0199: curl_setopt($curl, CURLOPT_HEADER, 1) ;
0200: curl_setopt($curl, CURLOPT_POST, TRUE);
0201: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); //結果を文字列で
0202: curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
0203: curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
0204: curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
0205: curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
0206: curl_setopt($curl, CURLOPT_TIMEOUT, 5);
0207: $res1 = @curl_exec($curl);
0208: $res2 = @curl_getinfo($curl);
0209: curl_close($curl);
0210:
0211: //結果処理
0212: if ($res1 != FALSE) {
0213: $json = substr($res1, $res2['header_size']);
0214: } else {
0215: $json = FALSE;
0216: }
0217:
0218: return $json;
0219: }
cURL関数群と、 http_build_query を利用することで実現している。
WebAPIからの応答結果を、JSONテキストでリターンする。
解説:テキスト要約
0221: /**
0222: * 「A3RT」を用いてテキストを要約する
0223: * @param string $sentence 要約するテキスト
0224: * @param string $errmsg エラーメッセージ格納用
0225: * @return string 要約結果/FALSE:要約失敗
0226: */
0227: function text_summary($sentence, &$errmsg) {
0228: //抽出文章数は入力文章数の3分の1
0229: $count = mb_substr_count($sentence, '。');
0230: $count = round($count / 3);
0231: if ($count < 1) $count = 1;
0232:
0233: //WebAPIにパラメータをPOST渡しする
0234: $url = REQUEST_TEXT_SUMMARY;
0235: $post = array(
0236: 'apikey' => APIKEY_A3RT,
0237: 'sentences' => $sentence,
0238: 'linenumber' => $count,
0239: 'separation' => '。'
0240: );
0241:
0242: //要約
0243: $res = $errmsg = '';
0244: $json = @post($url, $post);
0245: $items = json_decode($json);
0246:
0247: //エラーチェック
0248: if ($items == FALSE) {
0249: $res = FALSE;
0250: $errmsg = 'WebAPIが停止';
0251: } else if (isset($items->status)) {
0252: if (($items->status == 0) && (isset($items->summary[0]))) {
0253: foreach ($items->summary as $ss) {
0254: $res .= (string)$ss . '。';
0255: }
0256: } else {
0257: $res = FALSE;
0258: $errmsg = (string)$items->message;
0259: }
0260: }
0261:
0262: return $res;
0263: }
抽出文章数は、入力文章数の3分の1になるようにした。
参考サイト
- Text Summarization API:A3RT
- PHPで日本文の“要約もどき”を行う:ぱふぅ家のホームページ
(2022年2月12日)リクエストURL変更,抽出文章数を設定,PHP8対応,リファラ・チェック改良