サンプル・プログラムの実行例
サンプル・プログラム
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 | 任意 | 形態素品詞フィルタ出力対象とする品詞を”|”で区切って指定する。 省略時は全形態素を出力する。 |
解説:準備
0038: //gooラボ アプリケーションID
0039: //https://labs.goo.ne.jp/apiregister/ にて登録のこと.
0040: define('GOOLABS_APPLICATION_ID', '******************************');
取得したIDは定数 GOOLABS_APPLICATION_ID に格納すること。
解説:パラメータ渡し
0163: /**
0164: * POST渡しを行う
0165: * @param string $urlリクエストURL
0166: * @param array $data POST変数を格納した連想配列("変数名"=>"値")
0167: * @return string取得したコンテンツ/FALSE取得エラー
0168: */
0169: function post($url, $data = array()) {
0170: if (!ini_get('allow_url_fopen')) throw new Exception("Not Allowed URL Open!");
0171: $stream = stream_context_create(array('http' => array(
0172: 'method' => 'POST',
0173: 'header' => 'Content-type: application/x-www-form-urlencoded',
0174: 'content' => http_build_query($data),
0175: )));
0176:
0177: return @file_get_contents($url, false, $stream);
0178: }
解説:パラメータ受け
0138: /**
0139: * 指定したパラメータを取り出す
0140: * @param string $key パラメータ名(省略不可)
0141: * @param bool $auto TRUE=自動コード変換あり/FALSE=なし(省略時:TRUE)
0142: * @param mixed $def 初期値(省略時:空文字)
0143: * @return stringパラメータ/NULL=パラメータ無し
0144: */
0145: function getParam($key, $auto=TRUE, $def='') {
0146: if (isset($_GET[$key])) $param = $_GET[$key];
0147: else if (isset($_POST[$key])) $param = $_POST[$key];
0148: else $param = $def;
0149: if ($auto) $param = mb_convert_encoding($param, INTERNAL_ENCODING, 'auto');
0150: return $param;
0151: }
解説:解析と並べ替え
0180: /**
0181: * 「gooラボ 形態素解析API」を用いてテキストを解析する
0182: * @param string $sentence 解析するテキスト(1文;UTF-8)
0183: * @param array $items 解析結果を格納する配列
0184: * @return array(形態素数, メッセージ, APIのURL)
0185: */
0186: function getParse($sentence, &$items) {
0187: //WebAPIにパラメータをPOST渡しする
0188: $url = GOOLABS_PARSE_URL;
0189: $post = array(
0190: 'app_id' => GOOLABS_APPLICATION_ID,
0191: 'sentence' => $sentence
0192: );
0193: $cnt = 0;
0194: $message = '';
0195:
0196: //バージョンチェック
0197: if (isphp5over() == FALSE) {
0198: $message = 'PHP4以下では動作しない';
0199: } else {
0200: //API呼び出し
0201: $json = post($url, $post);
0202: if ($json == FALSE) {
0203: $message = 'WebAPIが停止';
0204: } else {
0205: $obj = json_decode($json);
0206: foreach ($obj->word_list[0] as $key=>$val) {
0207: $surface = $val[0];
0208: if (isset($items[$surface]['count'])) {
0209: $items[$surface]['count']++;
0210: } else {
0211: $items[$surface]['count'] = 1;
0212: $items[$surface]['pos'] = $val[1];
0213: $items[$surface]['reading'] = $val[2];
0214: }
0215: }
0216: }
0217: }
0218:
0219: return array($cnt, $message, $url);
0220: }
参考サイト
- gooラボ 形態素解析API
- PHPで形態素解析を行う:ぱふぅ家のホームページ
- PHPで2つの文章の類似度を計算する(WebAPI版):ぱふぅ家のホームページ
サーバサイドで利用できる形態素解析は、「PHPとKAKASIを使って単語に分解する」で紹介した「KAKASI」や、「ChaSen」、「MeCab」が有名であるが、サーバに負荷がかかる処理である。この「日本語形態素解析Webサービス」は処理速度も速く、サーバの負荷分散という意味では有用なWebAPIだ。
(2021年9月23日)PHP8対応,リファラ・チェック改良,https対応