PythonからYahooキーフレーズ抽出WebAPIを使う

概要

Yahooから提供されているテキスト解析WebAPIの中のキーフレーズ抽出APIを使って、入力された任意の文からキーフレーズ(重要語句)を抽出してみました。

テキスト解析WebAPIの中には「日本語形態素解析API」などがありますが、単に入力文から特徴的な単語を抜き出したいだけであれば、「キーフレーズ抽出API」の方がシンプルで簡単だと思います。
結果の形式はXMLJSONPHP Serializeから選択することが出来ます。今回はJSONで受け取ることにしました。

ソースコード

#coding:utf-8

import json
import urllib
import urllib2

#取得したアプリケーションIDを指定
appid = "***"

#キーフレーズ抽出APIのURL
pageurl = "http://jlp.yahooapis.jp/KeyphraseService/V1/extract"

#入力文
sentence = u"東日本大震災の影響で2度登板が流れ、実戦は6日の巨人戦以来、約2週間ぶり。それでも「試合で投げることに関して不安はない。調整が遅れているのは自分だけじゃない」と話していた斎藤だったが、プロの洗礼を浴びてしまった。斎藤は降板後「コントロールも良くなかったし、変化球の切れも良くなかった。"

def extract_keyphrase(sentence, id):
    sentence = urllib.quote_plus(sentence.encode("utf-8"))
    query = "%s?appid=%s&output=%s&sentence=%s" % (pageurl, id, "json", sentence)

    c = urllib2.urlopen(query)
    json_str = c.read()
    result = json.loads(json_str)

    return result

result = extract_keyphrase(sentence, id=appid)

#scoreの大きい順に表示
for k,v in sorted(result.items(), key=lambda x:x[1], reverse=True):
    print "keyphrase:%s, score:%d" % (k.encode("utf-8"), v)

実行結果

keyphrase:斎藤, score:100
keyphrase:東日本大震災, score:94
keyphrase:変化球, score:80
keyphrase:コントロール, score:76
keyphrase:洗礼, score:67
keyphrase:実戦, score:61
keyphrase:降板後, score:53
keyphrase:巨人戦, score:53
...(省略)

公式のドキュメントによると、キーワードと共に取得出来るスコアは以下のような値との事です。

Scoreは、重要度を示す目安の数値です。先頭のKeyphraseのScoreは100となり、以下相対的な重要度に応じて 100以下の値が割り当てられます。