« 2014年06月 | メイン | 2014年11月 »

2014年08月 アーカイブ

2014年08月07日

DaReCo Wikipedia 英語版

DaReCo Wikipedia 英語版

公開中です.ある意味世界進出.

2014年08月09日

Wikipedia内 - 連想計算エンジンAPI

v0.0.1

MeCab形態素解析API v0.0.1

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(['名詞'])})

Wikipedia内のワード連想計算とMeCab形態素解析をウエブAPI化しました

もともと
DaReCo

DaReCo Wikipedia
を構築するのに使っていた、

  • Wikipedia内のワードを連想計算するエンジン
  • Wikipediaのワードを辞書として利用しているMeCabの形態素解析

を、知人が使ってみたいというので、REST化し、ウエブAPIとしてみました.


■ MeCabによる形態素解析(Wikipediaを利用) ■

フレーズ(文字列)を入力とし、MeCabで形態素解析した結果を、フレーズ内での頻度とあわせて、JSON文字列で返します.
(詳細な出力形式はAPIのドキュメントをご参照ください)

MeCabの辞書にはIPA辞書などが利用できますが、(開発当時は)せいぜい数万語です.当然、最新のワードは入っていませんでしたので、Wikipediaのワードを追加辞書として利用しました.

これによって、100万語以上をカバーしています.

MeCabによる形態素解析APIデモ
このデモはGETメソッドで取得できていますが、これはブラウザから出力を確認できるようにしたためです.実際はPOSTメソッドのみを受け付けます.またこのデモは「mecabで形態素解析する」というクエリーのみを受け付けます.
利用したい方はapi_keyを取得してください.
現在MA11用にapi_keyを「ma11」としてAPIを開放しています.
(ただし、AWSのmicro.t1をproxyサーバーとして利用していますので、レスポンスは激しく遅いです.ご了承ください)

MeCabによる形態素解析 API ドキュメント

以下MeCabの直接の出力
mecab001.png

その2
mecab002.png


■ 入力ワードの連想ワードを計算(Wikipediaを利用) ■

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}}

連想計算API ドキュメント



この連想計算の英語版もあり、これはDaReCo Wikipedia (英語版)で利用しています.こちらは1000万×1000万以上のマトリックスとなっています.(英語版連想計算は今回APIでは提供していません)


ご利用になってみたいという方や、質問などは
yuno@yunopon.sakura.ne.jp
まで、ご連絡ください.

MeCab形態素解析API

v0.0.1

Wikipedia内 - 連想計算エンジンAPI v0.0.1

ワード群に関する連想ワードを計算し結果を返すエンジンです.

リクエストの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キーが付与されます.

python2.7によるサンプル

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}

About 2014年08月

2014年08月にブログ「[R言語] Rのお部屋::あーるのおへや[別館]」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2014年06月です。

次のアーカイブは2014年11月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.37