DaReCo Wikipedia 英語版
公開中です.ある意味世界進出.
« 2014年06月 | メイン | 2014年11月 »
公開中です.ある意味世界進出.
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の説明
(デフォルトのエンコードが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(['名詞'])})
もともと
DaReCo
や
DaReCo Wikipedia
を構築するのに使っていた、
を、知人が使ってみたいというので、REST化し、ウエブAPIとしてみました.
フレーズ(文字列)を入力とし、MeCabで形態素解析した結果を、フレーズ内での頻度とあわせて、JSON文字列で返します.
(詳細な出力形式はAPIのドキュメントをご参照ください)
MeCabの辞書にはIPA辞書などが利用できますが、(開発当時は)せいぜい数万語です.当然、最新のワードは入っていませんでしたので、Wikipediaのワードを追加辞書として利用しました.
これによって、100万語以上をカバーしています.
MeCabによる形態素解析APIデモ
このデモはGETメソッドで取得できていますが、これはブラウザから出力を確認できるようにしたためです.実際はPOSTメソッドのみを受け付けます.またこのデモは「mecabで形態素解析する」というクエリーのみを受け付けます.
利用したい方はapi_keyを取得してください.
現在MA11用にapi_keyを「ma11」としてAPIを開放しています.
(ただし、AWSのmicro.t1をproxyサーバーとして利用していますので、レスポンスは激しく遅いです.ご了承ください)
以下MeCabの直接の出力
その2
Wikipediaの記事タイトルと、その記事に含まれるワードを利用して、あるワード群に関する連想ワードを計算し結果を返すエンジンです.
具体的には
{
'艦これ': {'cnt': 1}, ---- ①
}
こういった形式のJSON文字列を入力し、これらから関連する連想ワードを重みつきで返します.(JSON形式の文字列)
{
'艦これ': {'cnt': 3.21},
'角川ゲームス': {'cnt': 1.23},
'DMM.com': {'cnt': 1.45},
'大日本帝国海軍': {'cnt': 0.34},
...
}
(この出力はサンプルです)
上記入力の例では入力するワードは1個しか指定していませんが、複数指定できます.
①の入力にはそのまま形態素解析の結果が使えます.
日本語Wikipediaの情報を利用していますので、およそ
100万記事 × 100万ワード(以上)
の、マトリックスで連想計算を行っています.
これらの計算ロジックを利用したのがDaReCo Wikipediaです.検索窓に入力されたフレーズを形態素解析し、それらから連想ワードを表示しています.
連想計算デモ
このデモはGETメソッドで取得できていますが、これはブラウザから出力を確認できるようにしたためです.実際はPOSTメソッドのみを受け付けます.またこのデモは以下のクエリーのみを受け付けます.
{'形態素解析': {'cnt': 1}}
この連想計算の英語版もあり、これはDaReCo Wikipedia (英語版)で利用しています.こちらは1000万×1000万以上のマトリックスとなっています.(英語版連想計算は今回APIでは提供していません)
ご利用になってみたいという方や、質問などは
yuno@yunopon.sakura.ne.jp
まで、ご連絡ください.
ワード群に関する連想ワードを計算し結果を返すエンジンです.
リクエストのURIは以下のとおりです.
http://www.darecophoe.com/dj/api/v_001/assocFromWords/api_key/
リクエストメソッド : POST
api_key : 各ユーザーに割り当てた文字列を指定します
POSTパラメータ
q(必須):
形態素解析の結果と同じ形式(マルチバイト文字はUTF-8でエンコードしてからJSON文字列にしてください)
サーバー側でパラメータとして受け取りmap形のインスタンスに変換した後、長さが30まで
n:
(デフォルト30、max300)
結果の個数.関連の高いものから最大n個返します
origin ※1:
(デフォルト0)
キーとして返された文字列のoriginを結果に付加するかどうかのフラグ
q(入力)のフォーマット
{
"word1": {"cnt": 1},
"word2": {"cnt": 1},
"word3": {"cnt": 1},
...
}
originなど他のキーがついていても無視します.ただしサーバー側で受け取ったJSON文字列で1000文字までですので、余計なスペースや改行、余分なキーはないほうがよいかもしれません.
※1
originの説明はMeCabによる形態素解析のドキュメントを参照してください.
結果は以下のような形式で返ってきます.結果は関連度の大きいものから上位n個を返しますが、ソートはされていません.
{
'艦これ': {'cnt': 3.21},
'角川ゲームス': {'cnt': 1.23},
'DMM.com': {'cnt': 1.45},
'大日本帝国海軍': {'cnt': 0.34},
...
}
(この出力はサンプルです)
originを返すよう指定されている場合は、cntキーのほかにoriginキーが付与されます.
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
# ここまでは形態素解析
# 以下形態素解析の結果を用いて連想計算を行う
data = urllib.urlencode({'q': body})
url = 'http://%(domain)s/api/v_001/assocFromWords/%(apikey)s/' % {'domain': domain, 'apikey': api_key}
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
body = response.read()
response.close()
print body
obj = json.loads(body)
for k, v in obj.iteritems():
print k, v
if __name__ == '__main__':
main()
出力結果(デフォルトなので30個を返します.ソートはされていません)
フラットファイルデータベース {u'cnt': 1.963238669466598}
microsoft jet database engine {u'cnt': 1.6592472083421497}
hadoop {u'cnt': 1.6712429326695695}
データベース管理システム {u'cnt': 1.4581663007233416}
階層型データモデル {u'cnt': 1.3805800199688154}
デリミタ {u'cnt': 1.7034612977580739}
エクサバイト {u'cnt': 1.6255091981213614}
管理 {u'cnt': 1.7475214416487281}
データ移行 {u'cnt': 2.000867131326227}
データ・クラスタリング {u'cnt': 1.4311966634294082}
idef1x {u'cnt': 1.611722125255795}
olap {u'cnt': 1.4938514568104344}
データウェアハウス {u'cnt': 2.380624292263059}
処理 {u'cnt': 2.5317893358955796}
データ分析 {u'cnt': 1.3797870622488642}
データ {u'cnt': 1.821831423127683}
ペタバイト {u'cnt': 1.5804527678131666}
超高速データベース {u'cnt': 2.223044024508403}
ツール {u'cnt': 1.5917291969594238}
extract/transform/load {u'cnt': 2.3430050936400235}
データ完全性 {u'cnt': 1.9056962378786186}
非構造化データ {u'cnt': 1.8388194158082403}
パターン認識 {u'cnt': 1.396134823043611}
ole db {u'cnt': 1.508803034130766}
gnu r {u'cnt': 1.4028342807921397}
データマイニング {u'cnt': 1.920448191146759}
テキストマイニング {u'cnt': 1.5276894417377058}
ビッグデータ {u'cnt': 2.754803153926084}
データ統合 {u'cnt': 2.3076816607668102}
データ処理 {u'cnt': 3.3681212224215114}
origin:1を指定すると、originをつけて結果を返します.
microsoft jet database engine {u'origin': u'Microsoft Jet Database Engine', u'cnt': 1.6592472083421497} hadoop {u'origin': u'Hadoop', u'cnt': 1.6712429326695695}