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] -- 以下続く --
ときどき対象外の単語があったときは、二つずつひろうとは限らなくなります。