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

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 | 任意 | 形態素品詞フィルタ出力対象とする品詞を”|”で区切って指定する。 省略時は全形態素を出力する。 |
16: <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <!-- jQuery -->
17: <script>
18: // 初期値 ==================================================================
19: const TITLE = 'gooラボ 形態素解析API(jQuery版)'; //プログラム・タイトル
20: const REFERENCE = 'https://www.pahoo.org/e-soul/webtech/js00/js00-07-04.html';
21: //参照サイト
22: const WIDTH = 600; //表示幅(ピクセル)
23:
24: //gooラボ アプリケーションID
25: //https://labs.goo.ne.jp/apiregister/ にて登録のこと.
26: const GOOLABS_APPLICATION_ID = '*****************************************';
27:
28: //デフォルト検索キーワード【変更可】
29: const DEF_QUERY = '「7.2 jQueryによる実装」では、jQueryを使ってパラメータをGET渡しするWebAPIの利用方法を紹介した。今回は、POST渡しするWebAPIの1つ、「gooラボ 形態素解析API」を利用した形態素解析を行ってみる。形態素解析とは、入力された文章を、名詞や動詞、読点、句点などの形態素に分解すことである。';
定数 GOOLABS_APPLICATION_ID には、gooラボ アプリケーションIDを代入する。gooラボ アプリケーションIDの入手方法は「各種WebAPIの登録方法 - gooラボ」を参照のこと。
解説:Ajax通信
119: /**
120: * 検索ボタン押下処理
121: * @param なし
122: * @return なし
123: */
124: function parse() {
125: //エラー・クリア
126: let errmsg = '';
127: $('#error').html(errmsg);
128:
129: //検索結果クリア
130: $('#dest').val('');
131:
132: //検索キーワード
133: let query = $('#query').val();
134: //空白除去
135: query = query.trim();
136:
137: //WebAPI呼び出し
138: $.ajax({
139: url: 'https://labs.goo.ne.jp/api/morph',
140: type: 'POST',
141: async: true, //非同期通信フラグの指定
142: timeout: 1000, //タイムアウト時間(ミリ秒)
143: data: {
144: app_id: GOOLABS_APPLICATION_ID,
145: sentence: query,
146: },
147: })
148:
149: //WebAPI接続成功
150: .done(function (result) {
151: console.log(result);
152: //応答結果あり
153: if (typeof result.word_list != 'undefined') {
154: //応答結果を解析
155: let items = analyze_morpheme(result.word_list);
156: //一覧表TABLE作成
157: let html = printTable(items);
158: //一覧表を画面表示
159: $('#plists').html(html);
160:
161: //応答結果なし
162: } else {
163: errmsg = '検索キーワードが見つかりません.'
164: console.error(errmsg);
165: $('#error').html('エラー' + errmsg);
166: }
167: })
168:
169: //WebAPI接続失敗
170: .fail(function (data) {
171: console.error(data);
172: errmsg = 'WebAPIに接続できません.'
173: console.error(errmsg);
174: $('#error').html('エラー' + errmsg);
175: });
176: }
jQuery のセレクタ type を POST に変更するだけでPOST渡しできるようになる。

応答が得られたら、形態素毎に出現回数をカウントして配列 items に格納するユーザー関数 analyze_morpheme を呼び出す。次に、配列 items の内容をTABLEタグに展開し、画面に表示する。
解説:形態素の解析
56: /**
57: * 形態素の解析
58: * @param Array morphs 形態素
59: * @return Array 解析結果
60: */
61: function analyze_morpheme(morphs) {
62: //解析結果
63: let items = [];
64:
65: let cnt = 0;
66: for (let i= 0; i < morphs.length; i++) {
67: for (let j= 0; j < morphs[i].length; j++) {
68: //新規の形態素かどうか
69: let surface = morphs[i][j][0];
70: let flag = false;
71: let k;
72: for (k = 0; k < cnt; k++) {
73: if (items[k].surface == surface) {
74: flag = true;
75: break;
76: }
77: }
78: //新しい形態素を配列に追加
79: if (! flag) {
80: items[cnt] = Object();
81: items[cnt].surface = surface;
82: items[cnt].count = 1;
83: items[cnt].pos = morphs[i][j][1];
84: items[cnt].reading = morphs[i][j][2];
85: cnt++;
86: //形態素の出現回数+1
87: } else {
88: items[k].count++;
89: }
90: }
91: }
92: //降順ソート
93: items.sort(function(a, b) {
94: return b.count - a.count;
95: });
96:
97: return items;
98: }
出現回数の降順にソートするには、メソッド sort を利用した。このように無名関数を渡すことで、連想配列のソートを行うことができる。
解説:解析結果TABLE作成
コラム:日本語形態素解析

古いところでは、KAKASI(KAnji KAna Simple Inverter)がある。1992年、Hironobu Takahashさんが、東北大学(当時)の佐藤雅彦さんによって開発された SKK(Simple Kana Kanji converter)を逆から読んだ「分かち書き」プログラムがベースとなっている。
参考サイト
- gooラボ 形態素解析API
- 各種WebAPIの登録方法 - gooラボ:ぱふぅ家のホームページ
- PHPで形態素解析を行う(gooラボ版):ぱふぅ家のホームページ