たつをの ChangeLog : 2005-10-12

形態素解析器と Yahoo! Web 検索 API と TF-IDF を使ってキーワード抽
出するという先日の検索会議でのデモ、KEYAPI[2005-09-30-3]
教科書に載っているような基本中の基本ですが、あらためてエッセンスを
簡単な例で解説したいと思います。


目的:キーワード抽出対象テキストから、そのテキストを代表する
キーワードを抽出します。TF-IDF という指標を用います。(この値が大
きいほどその単語が代表キーワードっぽいということでよろしく。)
画像

TF-IDF を計算するためには、
(1) キーワード抽出対象テキスト中の代表キーワード候補出現数 (TF)、
(2) 全てのドキュメント数 (N)、
(3) 代表キーワード候補が含まれるドキュメントの数 (DF)、
を得る必要があります。

まず、(1) の TF から。キーワード抽出対象テキストの例 (a.txt) です。
本棚が届きました。さっそく組み立て。しかし、一部の部品に不良品があ
り一段だけ固定できません。本棚への道は険しいです。今週中に部品交換
に行ってきます。
これを形態素解析し、名詞だけ取り出します。
この例では、形態素解析器として chasen を用いています。
% chasen a.txt|grep '名詞'|sort|uniq -c|sort -nr
   2 本棚       ホンダナ        本棚    名詞-一般
   2 部品       ブヒン  部品    名詞-一般
   1 不良       フリョウ        不良    名詞-形容動詞語幹
   1 品 ヒン    品      名詞-接尾-一般
   1 道 ミチ    道      名詞-一般
   1 中 チュウ  中      名詞-接尾-副詞可能
   1 組み立て   クミタテ        組み立て        名詞-一般
   1 今週       コンシュウ      今週    名詞-副詞可能
   1 交換       コウカン        交換    名詞-サ変接続
   1 固定       コテイ  固定    名詞-サ変接続
   1 一部       イチブ  一部    名詞-副詞可能
   1 一段       イチダン        一段    名詞-一般
それぞれの単語が代表キーワード候補で、その出現数(左端の数)が TF
です。例:本棚:2、部品:2、不良:1。

次に、(2) の「全ドキュメント数 N」です。対象となるドキュメント群は、
ここでは、Yahoo! で検索できるすべての Web ページとします。
Yahoo! でインデックスされているページは 192 億ページと言われている
ので、N = 19200000000 ですね。まあ、適当な値でOKです。
(ref. Yahoo!がYSTのインデックスを増強、192億ページに
  <http://www.sem-ch.jp/news/000587.html>)

そして、(3) の DF (代表キーワード候補が含まれるドキュメントの数)
です。対象ドキュメント群は Yahoo! で検索できる全 Web ページなので、
Yahoo! 検索でのヒットした数が DF となります。ヒット数は Yahoo! API
で得ることができます。ちょっとトリッキーですが、以下にサンプルとし
て Perl でのヒット数取得関数 (超ad hoc) を挙げておきます。
use LWP::Simple;
sub get_num { # 検索ヒット数獲得 by Yahoo! API
    my ($key) = @_; # UTF-8
    $key =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
    my $url = "http://api.search.yahoo.com/WebSearchService/V1/".
        "webSearch?appid=YahooDemo&query=$key&results=1";
    my $c;
    ($c = get($url)) or die "Can't get $url\n";
    my ($num) = ($c =~ /totalResultsAvailable="(\d+)"/);
    return $num;
}

これで TF-IDF の計算の準備ができました。
試しに「本棚」で計算してみましょう。
TF = 2, DF = 2771, N = 19200000000 なので、
TFIDF ≒ 31.5 となりました。
% perl -e 'print 2*log(19200000000/2771),"\n"'
31.5024251422343
(ref. 「本棚」の DF <http://api.search.yahoo.com/WebSearchService/
  V1/webSearch?appid=YahooDemo&query=%e6%9c%ac%e6%a3%9a&results=1
>)

この値をすべてのキーワード候補に対して計算し、一番値が大きいの
が代表キーワードになります。上位何位かをランキング表示したりすれば
キーワード抽出っぽくなります。

さあ、Let's キーワード抽出!


参考: miyagawa 氏の Bulkfeeds <http://bulkfeeds.net/> には
形態素解析と tf-idf を用いたキーワード抽出の仕掛けがあり、
API として公開されています。
Bulkfeeds: Developer's API - RSS Directory & Search
<http://bulkfeeds.net/app/developer.html#terms>
形態素解析 + 特徴語抽出
任意のテキストに対して形態素解析を行い、Bulkfeeds の
記事データベースの統計データをもとに特徴語を抽出します。

なんだかんだいって六本木周辺でのランチは高いわけです。
ということで、六本木周辺の安いファーストフードを探してたら、
一覧を見つけました。それをベースにいくつか追加しました。
今後、見つけ次第追記して行きます。情報もお待ちしています!

お店場所
吉野家 六本木4丁目店六本木4丁目9-4
マクドナルド六本木5丁目2-6
サブウェイ 六本木東店六本木5丁目16-1
カレーショップPOT&POT六本木6丁目1-2
吉野家 六本木6丁目店六本木6丁目1-6
ウェンディーズ六本木6丁目1-24
バルチックカレー六本木7丁目8-7
モスバーガー六本木7丁目14-6
ファーストキッチン六本木7丁目14-11
松屋六本木7丁目14-12

ref. 首都圏タウン情報 六本木周辺情報
<http://www.athome.co.jp/kantan/town/ensen/eki/TW2291BCDDAHZ.html>

追記051013: バルチックカレーを追加。

今日は1人だったけど、プールに行ってきたよ。前回は[2005-10-03-4]
終了後のプール(歩道から撮影)

そうそう、ついにスイムタオルをゲットしました!1000円。
それから、施設使用料のプリペイドカードも買っちゃいました。
4400円分使えて4000円。プールは1回400円なので11回行ける!
スポーツタオルカード

スイムタオル(SPEEDO)(小) (カラー:ラベンダー) アシックス (asics) スイムタオル(大) DH-814 [分類:スイムタオル] ミズノスピードスイムタオルセーム(レギュラーサイズ)
この記事に言及しているこのブログ内の記事

代官山から中目黒まで歩いていたらこんなポスターを発見!
(久しぶりに FinePix F10 でフラッシュ使っちゃいました…)
ここにシカ
ないナラ!
画像
奈良県代官山iスタジオのポスターでした。
「奈良・大和路の“歴史・文化・観光・産業”早分かりステーション」だ
そうです。
画像
<http://www.pref.nara.jp/tokyo/i-studio/>

ともかく、かれこれ5年間奈良県民だった私もさすがにこんな恥ずかしい
ことは言えませんでしたよ。ふう。
追記060205: ごめんなさい。言ってました…。→[2005-03-14-5]

4月5日 Whisper【ウィスパー】シカ  ぬいぐるみ シカ S LM44

ハーゲンダッツのブラックセサミを食べました。
食べる前は「どうなのよ、これ」とあまり期待していなかったのですが、
食べてみると意外においしい! ねっとり感がGoodです。
ところで、季節限定らしいけど、黒ごまって旬とかあるのかな。
って、ハーゲンダッツの季節限定は旬もなにも関係ないのが多いから
別にいいのかな。
画像

ハーゲンダッツアイスクリームファミリーセット(ミニカップアソート 14個セット) 全国送料込価格!ハーゲンダッツパイント&ミニカップ 【ハーゲンダッツ】ミニカップ 12個入【送料無料】

東京メトロ日比谷線六本木駅下りホームに貼ってあった路線図が、
「デジカメで部分部分を撮影したのを重ねて大きな画像にしてそれを
プリンタでカラー印刷したみたいな感じ」で、ちょっとなんというか、
手作り感があふれすぎて、ほのぼのとした雰囲気が漂い、ええと、
みんながんばって生きているんだなあ、と思いました。
画像

このあたりの重なり具合にグッときます。
画像

たつをの ChangeLog
Powered by chalow