サンプル・プログラムの実行例
サンプル・プログラム
GooParse.php | サンプル・プログラム本体。 |
「gooラボ 形態素解析API」による形態素解析
URL |
---|
https://labs.goo.ne.jp/api/morph |
フィールド名 | 要否 | 内 容 |
---|---|---|
app_id | 必須 | gooラボのアプリケーションID。無料で入手できる。 |
sentence | 必須 | 解析する日本語テキスト。読点までの1文。UTF-8エンコード。 |
request_id | 任意 | リクエストID。 省略時は”labs.goo.ne.jp[タブ文字]リクエスト受付時刻[タブ文字]連番”となる。 |
info_filter | 任意 | 形態素情報フィルタ。form(表記)、pos(形態素)、read(読み)のうち、出力する情報を文字列で指定する。 複数指定する場合は、”|”で区切って複数記載する。 省略時は”form|pos|read”を指定したものとみなす。 |
>pos_filter | 任意 | 形態素品詞フィルタ出力対象とする品詞を”|”で区切って指定する。 省略時は全形態素を出力する。 |
解説:準備
38: //gooラボ アプリケーションID
39: //https://labs.goo.ne.jp/apiregister/ にて登録のこと.
40: define('GOOLABS_APPLICATION_ID', '******************************');
取得したIDは定数 GOOLABS_APPLICATION_ID に格納すること。
解説:パラメータ渡し
163: /**
164: * POST渡しを行う
165: * @param string $url リクエストURL
166: * @param array $data POST変数を格納した連想配列("変数名"=>"値")
167: * @return string 取得したコンテンツ/FALSE 取得エラー
168: */
169: function post($url, $data = array()) {
170: if (!ini_get('allow_url_fopen')) throw new Exception("Not Allowed URL Open!");
171: $stream = stream_context_create(array('http' => array(
172: 'method' => 'POST',
173: 'header' => 'Content-type: application/x-www-form-urlencoded',
174: 'content' => http_build_query($data),
175: )));
176:
177: return @file_get_contents($url, false, $stream);
178: }
解説:パラメータ受け
138: /**
139: * 指定したパラメータを取り出す
140: * @param string $key パラメータ名(省略不可)
141: * @param bool $auto TRUE=自動コード変換あり/FALSE=なし(省略時:TRUE)
142: * @param mixed $def 初期値(省略時:空文字)
143: * @return string パラメータ/NULL=パラメータ無し
144: */
145: function getParam($key, $auto=TRUE, $def='') {
146: if (isset($_GET[$key])) $param = $_GET[$key];
147: else if (isset($_POST[$key])) $param = $_POST[$key];
148: else $param = $def;
149: if ($auto) $param = mb_convert_encoding($param, INTERNAL_ENCODING, 'auto');
150: return $param;
151: }
解説:解析と並べ替え
180: /**
181: * 「gooラボ 形態素解析API」を用いてテキストを解析する
182: * @param string $sentence 解析するテキスト(1文;UTF-8)
183: * @param array $items 解析結果を格納する配列
184: * @return array(形態素数, メッセージ, APIのURL)
185: */
186: function getParse($sentence, &$items) {
187: //WebAPIにパラメータをPOST渡しする
188: $url = GOOLABS_PARSE_URL;
189: $post = array(
190: 'app_id' => GOOLABS_APPLICATION_ID,
191: 'sentence' => $sentence
192: );
193: $cnt = 0;
194: $message = '';
195:
196: //バージョンチェック
197: if (isphp5over() == FALSE) {
198: $message = 'PHP4以下では動作しない';
199: } else {
200: //API呼び出し
201: $json = post($url, $post);
202: if ($json == FALSE) {
203: $message = 'WebAPIが停止';
204: } else {
205: $obj = json_decode($json);
206: foreach ($obj->word_list[0] as $key=>$val) {
207: $surface = $val[0];
208: if (isset($items[$surface]['count'])) {
209: $items[$surface]['count']++;
210: } else {
211: $items[$surface]['count'] = 1;
212: $items[$surface]['pos'] = $val[1];
213: $items[$surface]['reading'] = $val[2];
214: }
215: }
216: }
217: }
218:
219: return array($cnt, $message, $url);
220: }
参考サイト
- gooラボ 形態素解析API
- PHPで形態素解析を行う:ぱふぅ家のホームページ
- PHPで2つの文章の類似度を計算する(WebAPI版):ぱふぅ家のホームページ
サーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析Webサービス」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。
(2021年9月23日)PHP8対応,リファラ・チェック改良,https対応