サンプル・プログラムの実行例
サンプル・プログラム
YahooParse.php | サンプル・プログラム本体。 |
バージョン | 更新日 | 内容 |
---|---|---|
2.3.0 | 2023/03/18 | 日本語形態素解析v2に対応 |
2.2 | 2021/10/02 | PHP8対応,リファラ・チェック改良,https対応 |
2.1 | 2017/04/30 | PHP7対応 |
2.0 | 2014/07/26 | 大幅改訂 |
1.2 | 2011/01/01 | Yahoo!カテゴリのWebAPIドメイン変更に対応 |
「Yahoo!JAPAN 日本語形態素解析」による形態素解析
URL |
---|
https://jlp.yahooapis.jp/MAService/V2/parse |
フィールド名 | 要否 | 内 容 | |
---|---|---|---|
id | 必須 | JSON-RPC 2.0のid。値は任意で、指定した値がレスポンスのidに返る。 | |
jsonrpc | 必須 | "2.0" 固定。 | |
method | 必須 | "jlp.maservice.parse" 固定。 | |
params | q | 必須 | 解析対象のテキスト。UTF-8エンコード。 |
解説:準備
37: //表示幅(ピクセル)
38: define('WIDTH', 600);
39:
40: //Yahoo! JAPAN Webサービス アプリケーションID【各自で設定】
41: //取得方法:https://www.pahoo.org/e-soul/webtech/php06/php06-01-02.shtm#Yahoo
42: define('YAHOO_APPLICATION_ID', '*****************************************');
43:
44: //リクエストURL【変更不可】
45: define('YAHOO_MAService_URL', 'https://jlp.yahooapis.jp/MAService/V2/parse');
46:
47: //解析テキスト(初期値)
48: define('DEF_SOUR', "Yahoo!JAPANの「日本語形態素解析」は、日本語文を形態素に分割し、品詞、読みがななどの情報を取得できるWebAPIである。\nサーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。");
取得したIDは定数 YAHOO_APPLICATION_ID に格納する。
解説:日本語形態素解析
165: /**
166: * 「Yahoo 日本語形態素解析」を用いてテキストを解析する.
167: * @param string $sentence 解析するテキスト
168: * @param array $items 解析結果を格納する配列
169: * @return bool TRUE/FALSE
170: */
171: function getParse($sentence, &$items) {
172: //WebAPIにパラメータをPOST渡しする
173: $url = YAHOO_MAService_URL;
174: $post = array(
175: 'id' => '1234-1', //ダミー
176: 'jsonrpc' => '2.0', //固定値
177: 'method' => 'jlp.maservice.parse', //固定値
178: 'params' => array(
179: 'q' => (string)$sentence //対象テキスト
180: )
181: );
182: $json = json_encode($post);
183:
184: //WebAPIにパラメータをPOST渡しする
185: $stream = stream_context_create(array('http' => array(
186: 'header' => "Content-Type: application/json\r\n" .
187: "User-Agent: Yahoo AppID: " . YAHOO_APPLICATION_ID . "\r\n",
188: 'method' => 'POST',
189: 'content' => $json,
190: )));
191:
192: //WebAPIリクエスト
193: $res = file_get_contents($url, FALSE, $stream);
194:
195: if ($res == FALSE) {
196: $this->error = TRUE;
197: $this->errmsg = 'WebAPI error: ' . $url;
198: return FALSE;
199: }
200:
201: //応答を配列へ代入する.
202: $results = json_decode($res);
203: //エラー処理
204: if (isset($results->error)) {
205: $this->error = TRUE;
206: $this->errmsg = 'WebAPI error: ' . $results->error->message;
207: }
208:
209: //応答データを処理する.
210: foreach ($results->result->tokens as $token) {
211: $key = (string)$token[0]; //形態素
212: //初めて登場する形態素を登録する.
213: if (! isset($items[$key])) {
214: $items[$key]['reading'] = (string)$token[1]; //読みがな
215: $items[$key]['pos'] = (string)$token[3]; //品詞
216: $items[$key]['count'] = 1; //出現回数
217: //2回目以降は出現回数をインクリメントする.
218: } else {
219: $items[$key]['count']++;
220: }
221: }
222:
223: return TRUE;
224: }
組み込み関数 stream_context_create を用いてパラメータをPOST渡しし、 file_get_contents でリクエストし、レスポンスを json_decode でデコードする。
解析された単語は配列変数 $items に格納する。このとき、同じ形態素は出現回数をカウントし、要素 'count' に格納する。
参考サイト
- 日本語形態素解析
- PHPで2つの文章の類似度を計算する(WebAPI版):ぱふぅ家のホームページ
- PHPで形態素解析を行う(gooラボ版):ぱふぅ家のホームページ
サーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。
(2023年3月18日)日本語形態素解析v2に対応