GroovyでTwitter botを作るための code部品

あるTwitterアカウントでの最近の発言群の中心をなすキーワードを抽出したリストを作る。

これによりタグクラウドを作る時の部品にする。
または、収集ボットを作る時に、似たような投稿はふるい落とすことに使う。

それまでの投稿内容のキーワードを10単語まで、バッファに保存し続けて
今回収集した投稿文のキーワードが、いまあるバッファにある単語と一致したら、
同一トピックについて語った文面であると判定して、評価を下げます。
これによって、
例えばあるニュースが流れて、それに反応して多くの人がつぶやいたとします。
捕捉ボットは、その場合、一番最初につぶやいた人の文面は普通にキャッチしますが、
二番手以降のつぶやきの評価は、一番手の発言で使用された単語とかぶるので、
そのつぶやきの捕捉確率を下げます。
その後もつぶやきを捕捉し続けて、その単語がバッファ辞書から流れて消えていけば、またおなじ捕捉確率に戻ります。
キーワードの除外単語は
 ハッシュタグ、ユーザーID、短縮URL
としました。

Yahoo APIのキーフレーズ抽出APIを使用しました。使用言語はGroovyです。

import twitter4j.*

cache=["某0","某1","某2","某3","某4","某5","某6","某7","某8","某9"]

Twitter twitter = new Twitter("ユーザーID","パスワード");
Iterator <Status> i= twitter.getUserTimeline("誰かターゲットのID").iterator();
	while(i.hasNext()) {
		ans = i.next().getText()
		getKwd(ans)
	}

def getKwd(String text) {
	parm1 = URLEncoder.encode(text.replaceAll(/#[^ ]+/,"").replaceAll(/@[^ ]+/,"") ,"UTF-8") 
	 // ハッシュタグとIDは除外
	def rssFeed =  ("http://jlp.yahooapis.jp/KeyphraseService/V1/extract?appid=取得したYahooAPIのID&sentence="+parm1).toURL().getText("UTF8")
	def rss = new XmlSlurper().parseText(rssFeed)
	kwd0= (rss.Result.Keyphrase[0]).toString().replaceAll(/ /,"")
	kwd1= (rss.Result.Keyphrase[1]).toString().replaceAll(/ /,"")
	if (kwd0 != "bit.ly"&& kwd0 != "tinyurl.com"&& kwd0 != "ff.im") {
		cache.add(kwd0)
		cache.remove(0)
	}
	if (kwd1 != "bit.ly"&& kwd1 != "tinyurl.com"&& kwd1 != "ff.im") {
		cache.add(kwd1)
		cache.remove(0)
	}
	// 短縮URLは除外
	println cache
}

ここではバッファ辞書サイズは10単語、ひとつの文から2単語ずつ抽出しています。
動作イメージ

[某2, 某3, 某4, 某5, 某6, 某7, 某8, 某9, 今多摩川, 花火]
[某3, 某4, 某5, 某6, 某7, 某8, 某9, 今多摩川, 花火, 口語体]
[某5, 某6, 某7, 某8, 某9, 今多摩川, 花火, 口語体, Gaelyk, Groovy]
[某7, 某8, 某9, 今多摩川, 花火, 口語体, Gaelyk, Groovy, JConsole, JRuby]
-- 以下続く --

ときどき対象外の単語があったときは、二つずつひろうとは限らなくなります。