Yahoo! のキーフレーズ抽出 API の使い道を軽く考えてみた

先日ですが Yahoo!デベロッパーネットワーク - テキスト解析 - キーフレーズ抽出 なる API が公開されました。

この API を駆使すれば個人でも Google AdSense のようなコンテンツマッチ広告すらできちゃいそうなシロモノです。この手の技術に興味がある僕からすれば、コンテンツマッチ技術の根幹の技術を、よくもまぁ無料の API で公開したものだなぁ〜 Yahoo! って太っ腹だなぁ〜と唯々感心するばかりです。

さて、どうせなので、コンテンツマッチの技術についてもう少ししゃべってみます。
基本的に”とあるページ”にコンテンツマッチの”何か”を表示するロジックはこんな感じ。

  1. ”とあるページ"(解析対象)”の html を取得
  2. html 全体から本文抽出
  3. 特徴語抽出(キーフレーズ抽出)
  4. 特徴語をベースに”表示する何か”を類似度順にソート(例えばコサイン距離とか)
  5. ”とあるページ”にソート順に”何か”を表示

例えば、コンテンツマッチ広告であれば、類似度順以外に、キーワードの入札単価や在庫という概念がでてきて、ここのロジックが重要になってくるわけですが、広告以外にも、ブログ内の類似記事抽出や、特徴語をベースに楽天や Amazon から商品検索するという簡単なロジックのモノまでいろいろと思い浮かびます。

とまぁ〜キーフレーズ抽出はコンテンツマッチ技術の高々イチ技術に過ぎないわけですが、もっとも手間がかかる部分でもあります。なぜならば特徴語抽出を行うためにはインターネットを網羅するような単語辞書が必要になるからです。キーフレーズ抽出 API に使われている辞書がどの辞書なのか判りかねますが、実際に使ってみたところ、かなり精度が良いという印象を受けました。

- スポンサーリンク -

さて、利用方法ですが、とりあえず思いついたのが、ブログエントリに JavaScript を貼り付けるだけで、特徴語に Amazon へのアンカーリンクを貼り付けるっていうブログパーツ。まぁ ”Amazonおまかせリンク(R)”もどきです。

・・・うーん・・・

と思ったんですけど、本文抽出を JavaScript だけで実装しようとするとちょっと骨が折れる作業であることが判りました。もっとも各ユーザが XPATH でぶっこ抜く対象を指定するってロジックにしちゃえば大丈夫なんですけどね。これじゃぁ〜広めるための敷居が上がっちゃうし・・・

と言うわけで、そこに行く前として Yahoo! のキーフレーズ抽出 API の実力判定として作ったモノを晒しておきます。気が向いたら、続きを作っていきますが、若干既に飽きてきています・・・(;^_^A

下のテキストエリアに解析したい文章をを入力して下さい。


※ html タグが含まれていると評価スコアが結構ぶれます。

↓↓ ここに解析結果を表示します ↓↓

ソースコードはこんな感じ。jQuery を初めて使ってみました。デベロッパーID とかは適当にご自分の ID でどうぞ。

<form id="form1">
<textarea id="query" rows="10" cols="100"></textarea>
<br />
<input type="submit" value="解析" />
</form>
<div id="result"></div>

<script type="text/javascript">
  $(function(){
    $("#form1").submit(function(){
      search1($("#query").val());
      return false;
    });
  });

  function search1(query) {
    $("#result").text("Loading...");
    $.ajax({
      dataType: "jsonp",
      data: {
        "appid": "デベロッパーID",
        "sentence": query,
        "output" : "json",
        "max-results":"10",
        "alt":"json-in-script"
      },
      cache: true,
      url: "http://jlp.yahooapis.jp/KeyphraseService/V1/extract",
      success: function (data) {
        var associd = "drk7jp-22";
        $("#result").empty();
        var text = $("#query").val();
        $.each(data, function(word,score){
          var affiliate = '<a href="http://www.amazon.co.jp/gp/search?ie=UTF8&keywords=' +encodeURI(word)+ '&tag=' + associd + '&index=blended&linkCode=ur2&camp=247&creative=1211">' +word+ '</a>';
          var re = new RegExp(word,"mg");
          text = text.replace(re, affiliate);
        });
        $("#result").append(text);
      }
    });
  }
</script>
- スポンサーリンク -