Hatena::Keyword で記事タイトルをニュー速化
Hatena::Keyword を CPAN に上げました。ということで(?) しょうもない Hack を一つ。フィードの URL を指定すると、そのフィードのタイトルをニュー速風に仕立て上げるという代物。よくあるあれですね。
僕のフィードではこうなりました。
[naoya@hydralisk work]$ perl nyusoku.pl http://d.hatena.ne.jp/naoya/rss 【iRC】 LimeChat 2.0【IRC】 【CPAN】 Hatena-Keyword-0.02【モジュール】 【コーパス】 はてなダイアリーキーワード抽出モジュール【MeCab】 【MacOSX】 いろいろインストールしてみました【ソフト】 【はてなブックマーク】 プログラマの種類とキャリア【努力】 【健康診断】 人力でのMac質問の回答どうもです・・・! 【OSX】 Witch【ターミナル】 【はてな認証API】 はてな認証API【Flickr】 【Rails】 どこからかこんな声が聞こえる 【WEB+DB PRESS】 勝手に添削 - WEB+DB Press Vol.32 オレオレコード版【blog】
なんとなくそれっぽい。以下ソース。10分ぐらいででっちあげ。Switch.pm なんて初めて使ったよ。
#!/usr/local/bin/perl use strict; use warnings; use Jcode; use Hatena::Keyword; use XML::Feed; use utf8; use Encode; use Switch; my $feed_url = shift or die "usage $0 <feed_url>"; my $feed = XML::Feed->parse(URI->new($feed_url)) or die XML::Feed->errstr; for my $entry ($feed->entries) { my $summary = $entry->summary->body; Encode::_utf8_off($summary); #FIXME my $keyword = Hatena::Keyword->extract($summary); my $title = nyusokufy($entry->title, $keyword); print Jcode->new($title, 'utf-8')->euc, "?n"; sleep 5; } sub nyusokufy { my ($text, $keywords) = @_; my @terms = sort { $a->refcount <=> $b->refcount } @$keywords; switch (@terms) { case 0 { return $text } case 1 { return sprintf "【%s】%s", $terms[0], $text } else { return sprintf "【%s】%s【%s】", $terms[0], $text, $terms[1] } } } 1;
フィードに含まれる各エントリの要約部分のテキストを Hatena::Keyword でキーワード抽出して、タイトルの前後にくっつけると。特徴語を見つけるアルゴリズムとかは特になくて、単純に結果を refcount (言及数) でソートして先頭の二つを取ってるだけですが、一応それなりの出力になるようですw
UTF-8 フラグを落としてやらないと Hatena::Keyword がちゃんと動かないことが判明したのでこれは 0.04 で対応するとします。