mecabの形態素解析結果を返すAPIです
リクエストのURIは以下のとおりです.
http://www.darecophoe.com/dj/api/v_001/getWordListFromText/api_key/
リクエストメソッド : POST
api_key : 各ユーザーに割り当てた文字列を指定します
POSTパラメータ
q(必須):
UTF-8でエンコードした文字列を指定
サーバー側でパラメータとして受け取った文字列で1000文字まで
nbest:
(デフォルト1)
mecabのパラメータnbest
origin ※1:
(デフォルト0)
キーとして返された文字列のoriginを結果に付加するかどうかのフラグ
cls:
(デフォルト['名詞','動詞','形容詞'])
返す文字列の品詞のリストをJSON文字列で指定
結果はtext/plainでJSON文字列として返します.
{
"word1": {"cnt": 7},
"word2": {"cnt": 3},
"word3": {"cnt": 11},
...
}
※1 originの説明
- 内部の形態素解析/連想計算エンジンでは、大文字/小文字、半角/全角をユニークにするため、すべて小文字全角に変換して辞書を保持し、それらに対して処理を行っています.
- この時、小文字全角に変換される前の、元の文字列をoriginとして別途保持しています.
- 小文字全角に変換して同じになってしまう文字列は、元の文字列を複数持っていますが、バイナリで一番短いものをoriginとして返します.
- ここまでは内部の計算エンジンの説明です.
- したがって、例えばmecabというワードをqに指定すると、「mecab」(小文字半角)は「mecab」として変換されて形態素解析/連想計算エンジンに渡されます.
- 返される結果のキーも「mecab」となります.
- originを返すように指定すると、この場合originに「MeCab」が返されます.qに指定されたのが「mecab」であったとしても「MeCab」が返ります.
- 計算エンジンは小文字全角に変換された値でしか処理しませんので、こちらの辞書に存在するoriginを返すためです.ですので、それ以降の処理はクライアント側で行う必要があります.
- こちらの辞書にoriginが存在しなかった場合は、元の文字列をoriginとして返します.
python2.7によるサンプル
(デフォルトのエンコードがutf-8に設定されています)
import urllib, urllib2
import json
def main():
domain = 'www.darecophoe.com/dj'
api_key = 'ma11'
#qin = 'mecabで形態素解析する'
qin = 'ビッグデータとは、市販されているデータベース管理ツールや従来のデータ処理アプリケーションで処理することが困難なほど巨大で複雑なデータ集合の集積物を表す用語である。'
data = urllib.urlencode({'q': qin})
url = 'http://%(domain)s/api/v_001/getWordListFromText/%(apikey)s/' % {'domain': domain, 'apikey': api_key}
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
body = response.read()
response.close()
print body # json文字列
obj = json.loads(body)
print obj # pythonのmap型へ変換
for k, v in obj.iteritems():
print k, v
return
if __name__ == '__main__':
main()
結果(上記サンプルの「body」変数をprintしたもの)
{
"\u8907\u96d1": {
"cnt": 1
},
"\u5e02\u8ca9": {
"cnt": 1
},
"\u96c6\u7a4d": {
"cnt": 1
},
"\u5f93\u6765": {
"cnt": 1
},
...
変数「obj」を表示
for k, v in obj.iteritems():
print k, v
複雑 {u'cnt': 1}
市販 {u'cnt': 1}
巨大 {u'cnt': 1}
従来 {u'cnt': 1}
管理 {u'cnt': 1}
れる {u'cnt': 1}
集積 {u'cnt': 1}
困難 {u'cnt': 1}
処理 {u'cnt': 1}
する {u'cnt': 2}
いる {u'cnt': 1}
データ {u'cnt': 1}
ビッグデータ {u'cnt': 1}
こと {u'cnt': 1}
集合 {u'cnt': 1}
表す {u'cnt': 1}
用語 {u'cnt': 1}
物 {u'cnt': 1}
データベース {u'cnt': 1}
アプリケーション {u'cnt': 1}
ツール {u'cnt': 1}
データ処理 {u'cnt': 1}
名詞のみを返したい場合
data = urllib.urlencode({'q': qin, 'cls':json.dumps(['名詞'])})