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

サンプル・プログラム
keyphrase.php | サンプル・プログラム本体。 |
キーフレーズ抽出
URL |
---|
https://jlp.yahooapis.jp/KeyphraseService/V2/extract |
フィールド名 | 要否 | 内 容 | |
---|---|---|---|
id | 必須 | JSON-RPC 2.0のid。値は任意で、指定した値がレスポンスのidに返る。 | |
jsonrpc | 必須 | "2.0" 固定。 | |
method | 必須 | "jlp.keyphraseservice.extract" 固定。 | |
params | q | 必須 | 解析対象のテキスト。UTF-8エンコード。 |
準備:アプリケーションIDなど
15: // 初期化処理 ================================================================
16: define('INTERNAL_ENCODING', 'UTF-8');
17: mb_internal_encoding(INTERNAL_ENCODING);
18: mb_regex_encoding(INTERNAL_ENCODING);
19: define('MYSELF', basename($_SERVER['SCRIPT_NAME']));
20: define('REFERENCE', 'https://www.pahoo.org/e-soul/webtech/php06/php06-34-01.shtm');
21:
22: //プログラム・タイトル
23: define('TITLE', 'キーフレーズを取り出す');
24:
25: //リファラチェック+リリースフラグの設定
26: if (isset($_SERVER['HTTP_HOST']) && ($_SERVER['HTTP_HOST'] == 'localhost')) {
27: define('FLAG_RELEASE', FALSE);
28: define('REFER_ON', '');
29: ini_set('display_errors', 1);
30: ini_set('error_reporting', E_ALL);
31: } else {
32: //リリース・フラグ(公開時にはTRUEにすること)
33: define('FLAG_RELEASE', TRUE);
34: //リファラ・チェック(直リン防止用;空文字ならチェックしない)
35: define('REFER_ON', 'www.pahoo.org');
36: }
37:
38: //表示幅(ピクセル)
39: define('WIDTH', 600);
40:
41: //Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
42: //取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
43: define('YAHOO_APPLICATION_ID', '*************************************');
44:
45: //Yahoo!JAPAN キーフレーズ抽出(V2)【変更不可】
46: define('YAHOO_KEYPHRASE_URL', 'https://jlp.yahooapis.jp/KeyphraseService/V2/extract');
47:
48: //リンク先の検索対象ドメイン名
49: define('SEARCH_DOMAIN', 'pahoo.org');
50:
51: //サンプル・テキスト
52: define('SAMPLE_TEXT', "1000年(長保2年)2月25日、藤原道長の長女、藤原彰子が第66代・一条天皇の中宮(皇后)となる。\n女房として、「源氏物語」の作者である紫式部や、歌人・和泉式部をしたがえ、朝廷に華麗な文芸サロンを形成した。\nまた、これより少し前、中宮定子の女房として、「枕草子」の作者とされる清少納言が仕えており、この頃、国文学が盛んになった。");
取得したIDは定数 APPLICATION_ID に格納する。
その他、変更不可と記載のない定数は任意に変更して構わない。
解説:キーフレーズを取り出す
195: /**
196: * 「Yahoo!JAPAN キーフレーズ抽出」を用いてキーフレーズを取り出す
197: * @param string $sentence 解析するテキスト
198: * @param array $items 解析結果を格納する配列
199: * @return bool TRUE:成功/FALSE:失敗
200: */
201: function getKeyphrase($sentence, &$items) {
202: $url = YAHOO_KEYPHRASE_URL;
203: $post = array(
204: 'id' => '1234-1', //ダミー
205: 'jsonrpc' => '2.0', //固定値
206: 'method' => 'jlp.keyphraseservice.extract', //固定値
207: 'params' => array(
208: 'q' => (string)$sentence //対象テキスト
209: )
210: );
211: $json = json_encode($post);
212:
213: //WebAPIにパラメータをPOST渡しする
214: $stream = stream_context_create(array('http' => array(
215: 'header' => "Content-Type: application/json\r\n" .
216: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
217: 'method' => 'POST',
218: 'content' => $json,
219: )));
220:
221: //WebAPIリクエスト
222: $res = @file_get_contents($url, FALSE, $stream);
223:
224: if ($res == FALSE) {
225: $this->error = TRUE;
226: $this->errmsg = 'WebAPI error: ' . $url;
227: return FALSE;
228: }
229:
230: //応答を配列へ代入
231: $results = json_decode($res);
232: if (! isset($results->result->phrases)) return FALSE;
233: $cnt = 0;
234: foreach ($results->result->phrases as $phrase) {
235: if (isset($phrase->score) && isset($phrase->text)) {
236: $items[(string)$phrase->text] = (int)$phrase->score;
237: $cnt++;
238: }
239: }
240:
241: return ($cnt > 0) ? TRUE : FALSE;
242: }

WebAPIに渡すパラメータは json_encode 関数によってJSON文字列にエンコードする。
User-Agentとして Yahoo! JAPAN Webサービス アプリケーションID を渡すために、 stream_context_create 関数を使ってストリームコンテキストを用意し、 file_get_contents 関数を使って応答JSON文を取得する。

応答JSON文は json_decode 関数を使って連想配列にデコードし、配列 $items へ格納していく。
解説:ワードクラウドの作成
255: /**
256: * ワードクラウドを作成する
257: * @param array $items 情報を格納した配列
258: * @return string ワードクラウド(HTML)
259: */
260: function makeWordCloud($items) {
261: $width = WIDTH;
262: $outstr = '';
263: $n = 0;
264:
265: foreach ($items as $keyphrase=>$score) {
266: $n++;
267: $fsize = $score * 1.7 + 80;
268: $link = get_link($keyphrase);
269: if ($n > 1) $outstr .= " \n";
270: $outstr .=<<< EOT
271: <span style="font-size:{$fsize}%; color:blue;">
272: <a href={$link}>{$keyphrase}</a>
273: </span>
274:
275: EOT;
276: }
277: return $outstr;
278: }

「キーフレーズの重要度」が100以下の数値であるので、フォントの大きさの計算式を変更している。
参考サイト
- キーフレーズ抽出API:Yahoo!デベロッパーネットワーク
- PHPで形態素解析を行う:ぱふぅ家のホームページ
- PHPでワードクラウドをつくる:ぱふぅ家のホームページ
(2021年10月2日)現行WebAPIが2022年1月末に終了することからキーフレーズ抽出(V2)に変更,PHP8対応,その他。