サンプル・プログラムの実行例
サンプル・プログラム
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など
0015: // 初期化処理 ================================================================
0016: define('INTERNAL_ENCODING', 'UTF-8');
0017: mb_internal_encoding(INTERNAL_ENCODING);
0018: mb_regex_encoding(INTERNAL_ENCODING);
0019: define('MYSELF', basename($_SERVER['SCRIPT_NAME']));
0020: define('REFERENCE', 'https://www.pahoo.org/e-soul/webtech/php06/php06-34-01.shtm');
0021:
0022: //プログラム・タイトル
0023: define('TITLE', 'キーフレーズを取り出す');
0024:
0025: //リファラチェック+リリースフラグの設定
0026: if (isset($_SERVER['HTTP_HOST']) && ($_SERVER['HTTP_HOST'] == 'localhost')) {
0027: define('FLAG_RELEASE', FALSE);
0028: define('REFER_ON', '');
0029: ini_set('display_errors', 1);
0030: ini_set('error_reporting', E_ALL);
0031: } else {
0032: //リリース・フラグ(公開時にはTRUEにすること)
0033: define('FLAG_RELEASE', TRUE);
0034: //リファラ・チェック(直リン防止用;空文字ならチェックしない)
0035: define('REFER_ON', 'www.pahoo.org');
0036: }
0037:
0038: //表示幅(ピクセル)
0039: define('WIDTH', 600);
0040:
0041: //Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
0042: //取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
0043: define('YAHOO_APPLICATION_ID', '*************************************');
0044:
0045: //Yahoo!JAPANキーフレーズ抽出(V2)【変更不可】
0046: define('YAHOO_KEYPHRASE_URL', 'https://jlp.yahooapis.jp/KeyphraseService/V2/extract');
0047:
0048: //リンク先の検索対象ドメイン名
0049: define('SEARCH_DOMAIN', 'pahoo.org');
0050:
0051: //サンプル・テキスト
0052: define('SAMPLE_TEXT', "1000年(長保2年)2月25日、藤原道長の長女、藤原彰子が第66代・一条天皇の中宮(皇后)となる。\n女房として、「源氏物語」の作者である紫式部や、歌人・和泉式部をしたがえ、朝廷に華麗な文芸サロンを形成した。\nまた、これより少し前、中宮定子の女房として、「枕草子」の作者とされる清少納言が仕えており、この頃、国文学が盛んになった。");
取得したIDは定数 APPLICATION_ID に格納する。
その他、変更不可と記載のない定数は任意に変更して構わない。
解説:キーフレーズを取り出す
0195: /**
0196: * 「Yahoo!JAPANキーフレーズ抽出」を用いてキーフレーズを取り出す
0197: * @param string $sentence 解析するテキスト
0198: * @param array $items 解析結果を格納する配列
0199: * @return bool TRUE:成功/FALSE:失敗
0200: */
0201: function getKeyphrase($sentence, &$items) {
0202: $url = YAHOO_KEYPHRASE_URL;
0203: $post = array(
0204: 'id' => '1234-1', //ダミー
0205: 'jsonrpc' => '2.0', //固定値
0206: 'method' => 'jlp.keyphraseservice.extract', //固定値
0207: 'params' => array(
0208: 'q' => (string)$sentence //対象テキスト
0209: )
0210: );
0211: $json = json_encode($post);
0212:
0213: //WebAPIにパラメータをPOST渡しする
0214: $stream = stream_context_create(array('http' => array(
0215: 'header' => "Content-Type: application/json\r\n" .
0216: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
0217: 'method' => 'POST',
0218: 'content' => $json,
0219: )));
0220:
0221: //WebAPIリクエスト
0222: $res = @file_get_contents($url, FALSE, $stream);
0223:
0224: if ($res == FALSE) {
0225: $this->error = TRUE;
0226: $this->errmsg = 'WebAPI error: ' . $url;
0227: return FALSE;
0228: }
0229:
0230: //応答を配列へ代入
0231: $results = json_decode($res);
0232: if (! isset($results->result->phrases)) return FALSE;
0233: $cnt = 0;
0234: foreach ($results->result->phrases as $phrase) {
0235: if (isset($phrase->score) && isset($phrase->text)) {
0236: $items[(string)$phrase->text] = (int)$phrase->score;
0237: $cnt++;
0238: }
0239: }
0240:
0241: return ($cnt > 0) ? TRUE : FALSE;
0242: }
WebAPIに渡すパラメータは json_encode 関数によってJSON文字列にエンコードする。
User-Agentとして Yahoo! JAPAN Webサービス アプリケーションID を渡すために、 stream_context_create 関数を使ってストリームコンテキストを用意し、 file_get_contents 関数を使って応答JSON文を取得する。
応答JSON文は json_decode 関数を使って連想配列にデコードし、配列 $items へ格納していく。
解説:ワードクラウドの作成
0255: /**
0256: * ワードクラウドを作成する
0257: * @param array $items情報を格納した配列
0258: * @return stringワードクラウド(HTML)
0259: */
0260: function makeWordCloud($items) {
0261: $width = WIDTH;
0262: $outstr = '';
0263: $n = 0;
0264:
0265: foreach ($items as $keyphrase=>$score) {
0266: $n++;
0267: $fsize = $score * 1.7 + 80;
0268: $link = get_link($keyphrase);
0269: if ($n > 1) $outstr .= " \n";
0270: $outstr .=<<< EOT
0271: <span style="font-size:{$fsize}%; color:blue;">
0272: <a href={$link}>{$keyphrase}</a>
0273: </span>
0274:
0275: EOT;
0276: }
0277: return $outstr;
0278: }
「キーフレーズの重要度」が100以下の数値であるので、フォントの大きさの計算式を変更している。
参考サイト
- キーフレーズ抽出API:Yahoo!デベロッパーネットワーク
- PHPで形態素解析を行う:ぱふぅ家のホームページ
- PHPでワードクラウドをつくる:ぱふぅ家のホームページ
(2021年10月2日)現行WebAPIが2022年1月末に終了することからキーフレーズ抽出(V2)に変更,PHP8対応,その他。