« テスト駆動開発 (test driven development: TDD) のすすめ | セキュアなサーバを作るために最低限やっておくこと »

2009.06.11

Yahooキーワード抽出APIライブラリ

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをnewsingに追加

Yahoo!デベロッパーネットワークという
Yahooの資産を使ってたくさんのWeb-APIを公開してくれるサイトがあります。

そのAPI群の1つに
「送信したテキストを解析して、重要なキーワードを判別してくれる」
という、キーワード抽出APIというものがあり、これをサーバから使いたいなと言うことで、PythonでそのAPI用のサンプルコードを書きました。

なお、XML解析にはBeautifulSoupを使用しております。

yahoo_keyphrase_service.py

# -*- encoding: utf8 -*-

"""
Python-2.5.2 でのみ動作確認
BeautifulSoup をimportできる必要がある

@dependency BeautifulSoup-3.0.7a 
@author cozy
“”"

import httplib
import urllib
import urllib2
import traceback
from BeautifulSoup import BeautifulSoup

class YahooKeyphraseService(object):

    def __init__(self, app_id, sentence):
        “”"
        @param str  app_id
        @param ustr sentence
        “”"
        self.__app_id = app_id
        self.__api_url = “http://jlp.yahooapis.jp/KeyphraseService/V1/extract”
        self.__api_input_encoding = ‘utf-8′
        self.__api_output_encoding = ‘utf-8′
        self.__sentence = sentence

    def query(self):
        data = []
        source = self.__request(self.__api_url, self.__create_params())
        soup = BeautifulSoup(source)
        results = soup.findAll(’result’) # タグ名がBeautifulSoupを通すと小文字になるっぽい
        for result in results:
            d = {}
            d['keyphrase'] = result.keyphrase.renderContents().decode(self.__api_output_encoding, ‘ignore’)
            d['score'] = int(result.score.renderContents())
            data.append(d)
        return data

    def __request(self, url, params):
        “”"@return str HTML Source”"”
        fh = urllib2.urlopen(url, urllib.urlencode(params))
        src = fh.read()
        fh.close
        return src

    def __create_params(self):
        return {
            ‘appid’: self.__app_id,
            ’sentence’: self.__sentence.encode(self.__api_input_encoding, ‘ignore’),
            ‘output’: “xml”,
        }

こんな風に使います

# -*- encoding: utf8 -*-

ADD_ID = "Yahooから配布されるアプリケーションID"
SENTENCE = """解析対象テキスト"""

from yahoo_keyphrase_service import YahooKeyphraseService
yks = YahooKeyphraseService(
    app_id=APP_ID,
    sentence=SENTENCE.decode('utf8', 'ignore'),
)
results = yks.query()

for i in results:
    print "Keyphrase = ", i['keyphrase']
    print “Score = “, i['score']

ん? テストどうしたのテスト? ・・・という出来ですみません。

なお、他にAPIについて気付いた点としては、以下となります。
・1日に5万リクエストまで可能という太っ腹さ
・解析対象にHTMLを投げると解析に失敗する・・・残念
重要度の判定がイマイチ・・・というかイマサン位・・・・・・。

最後に全てを台無しにすることをさらっと言ってみましたが、
それでは皆さん、良きAPIライフを!

Trackback URL

Comment & Trackback

No comments.

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>