トップ(最新) | <前

nDiki : 風呂

スポンサード リンク

Related term

2007年12月29日 (土)

Twitter ベイジアンフィルタプロキシ このエントリーを含むはてなブックマーク

Twitter で following が増えてくるにつれて、タイムラインに目を通すのが大変になってきた(という程きちんと見ている訳ではないが)。 さっとタイムラインをなめて面白そうな情報をピックアップしたい時は、「おはよう」とか「風呂入った」とか「トイレ」とかは除外して読みたい(そういう書き込み自体は嫌いじゃないのだが、人生はあまりにも短い)。

Twit や P3:PeraPeraPrv では NG ワード指定ができて、それらを含むステータスは表示しないようにできるのだが、Twitter の書き込みは揺らぎが激しすぎて指定しきれないという弱点がる。

ということでベイジアンフィルタでフィルタリングしてみることにした。

自前で Twitter クライアントを作る気はないので、proxy の形でさっと実装してみた。

 #!/usr/bin/perl

 use strict;
 use warnings;

 use HTTP::Proxy;
 use HTTP::Proxy::BodyFilter::complete;

 my $proxy = HTTP::Proxy->new(port => 8088);
 $proxy->push_filter(response => HTTP::Proxy::BodyFilter::complete->new,
                     mime     => 'application/xml');
 $proxy->push_filter(response => Bsfilter->new,
                     mime     => 'application/xml');
 $proxy->start;

 {

   package Bsfilter;

   use File::Temp qw/tempfile/;
   use XML::XPath;
   use base qw(HTTP::Proxy::BodyFilter);

   sub filter {
     my ($self, $dataref, $message, $protocol, $buffer) = @_;
     return unless defined($$dataref) && $$dataref ne '';
     eval {
       my $xml = XML::XPath->new(xml => $$dataref);
       my @nodes = $xml->findnodes('/statuses/status/text/text()');
       return unless @nodes;
       for my $node (@nodes) {
         my $text = $node->getNodeValue;
         if (is_NG($text)) {
           $node->setNodeValue("[NG] $text");
         }
       }
       $$dataref = qq(<?xml version="1.0" encoding="UTF-8"?>\n);
       $$dataref .= $xml->get_context->toString;
       utf8::encode($$dataref);
     };
     if ($@) {
       warn $@;
     }
   }

   sub will_modify { 1 }

   sub is_NG {
     my ($text) = @_;

     my ($fh, $filename) = tempfile();
     utf8::encode($text);
     print $fh $text;
     close($fh);
     my $result
       = system(
       "bsfilter --homedir ~/.twitter-bsfilter --ignore-header --auto-update $filename"
       );
     unlink($filename);

     return !$result;
   }
 }

@ HTTP proxy の作成

PerlHTTP proxy を作ろうとして真っ先に思い浮かんだのは POE だけれど、ちょっとヘビーなので今回は HTTP::Proxy をチョイス。 もともとフィルタリング HTTP proxy を作ることを念頭に置いた Perl モジュールなので今回の目的にぴったり。

1つはまった点といえば、filter の呼び出しがレスポンス全てを取得してからではなく一部分ずつの呼び出しになるところ。その仕様に気がつくのにちょっと時間がかかってしまった。 例えば XML 形式のレスポンスをフィルタしようとしても、普通に HTTP::Proxy を使うと XML の一部ずつがフィルタに渡されるため、XML のパースがうまくいかない。

これについては HTTP::Proxy::BodyFilter::complete を使うことで、まとめてフィルタに渡せるようになった。

@ レスポンスの処理

Twitter のタイムライン取得については P3:PeraPeraPrvXML 形式で取得しているので、そのタイプのレスポンスをフィルタするようにした。

XML::XPath でステータス部分を抜き出して NG 判定し、NG であれば先頭に [NG] を追加する。 これで Twitter クライアント側で [NG] を NG ワード指定すれば、表示されないようにすることができる。

@ bsfilter による NG 判定

NG 判定は普段メールspam フィルタとして使っている bsfilter を使った。 単純に system 関数で呼び出して結果を取得するだけ。

今回は対象がメールではないので --ignore-header を指定。また自動的に学習するように --auto-update を指定。 それと普段メールのフィルタリングに使っているのとは bsfilterデータベースを別にしたいので、--homedir も指定しておく。

@ NG と非 NG の学習。

NG ワードを twitter-NG.txt に、非 NG ワードを twitter-clean.txt に書いて以下のコマンドを実行。

 bsfilter --add-clean --ignore-header --homedir ~/.twitter-bsfilter twitter-clean.txt
 bsfilter --add-spam --ignore-header --homedir ~/.twitter-bsfilter twitter-NG.txt
 bsfilter --update --homedir ~/.twitter-bsfilter

自分の環境 (Debian GNU/Linux sid)では、UTF-8 で書いておいて問題なかった。

@ フィルタリングしてみる

あとは先の proxy を起動し、P3:PeraPeraPrv でプロキシとして localhost:8088 を指定すれば OK。

タイムラインを取得するたびに bsfilter が動いて NG なステータスには [NG] が挿入される。

@ フィルタリングの精度

これについては、まだまだチューンの必要ありかな。

  • 事前の学習データが少ない。
  • --auto-update していることもあり、最初に NG 判定が多いとそちら側に強化されすぎる。
  • 毎回 bsfilter を呼んでいるため、同じステータスが何度も学習される。

まだ使える精度まで上がってないけれど、教師データを増やせばそれなりにいけるかもしれない。

proxy の枠組ができたので、(@~は抜いてから bsfilter に渡すとか、前後の文脈も含めるとか)いろいろ試して遊べそうではある。 別に bsfilter にこだわらず、正規表現による判定などをしてもよいし。

この辺り P3 は Java で書かれているので、プラグインを書いて拡張できるよう将来になると面白いなと思ってみたり。

スポンサード リンク


[ 12月29日全て ]

2007年12月31日 (月)

今日のさえずり - 78円の赤いきつねに、430円のかき揚げ このエントリーを含むはてなブックマーク


[ 12月31日全て ]

2008年1月14日 (月)

今日のさえずり - ドロンボー側はいいね このエントリーを含むはてなブックマーク


ヤッターマン30年目の復活 このエントリーを含むはてなブックマーク

ヤッターマン YM-F04 ヤッターフィギュア ボヤッキー

1977年1月1日から1979年1月27日まで放送されその後何度も再放送されたこともあり、自分の前後の世代ではほとんどの人が知っているヤッターマンが、新しい作品になって帰ってきた。 これは第1話を観ずにはいられないではないか。

ということで早めにお風呂を済ませて、テレビにかじりついて視聴。

ドロンボー側のキャラクターは声優陣も前作と同じでイメージも前作をきっちりと維持していて嬉しい限り。 ルパン三世と並ぶ秀逸なお色気具合も健在だ。

一方ヤッターマン側は結構印象を変えてきた感じ。 表情によってタッチを変えすぎの感がある。

ドロンボー側はオールド世代向け、ヤッターマン側は前作を知らない世代向けにチューニングしてきたな。これは。

ハクション大魔王がチラっとでてきたりと制作側の遊びも感じられるし全体的には好印象だった。 19:00 からだといつもは無理だけれど、早く帰宅できる時は観たいな。


[ 1月14日全て ]

2008年4月13日 (日)

今日のさえずり - この歳でまだ口笛が吹けない このエントリーを含むはてなブックマーク

@ 2008年04月11日

  • 09:40 車掌が昨日のダイヤの乱れを車内放送で詫びている。機械的に。[mb]
  • 13:17 Google を「ゴーグル」と言われて、最初「ん?」と思った。
  • 14:35 使ったことのない CD-R 書き込みソフトを使って ISO イメージを書き込んだら、予想通り ISO イメージファイルが1コ書き込まれた。
  • 22:36 Google を「ゴーグル」と発音している人がいたので、心配になって調べた。http://tinyurl.com/5c2ct4
  • 24:29 BESSA-R4A 欲しい。
  • 24:36 今日は久しぶりに LBL の練習した。忘れていた手順は攻略本で復習。

@ 2008年04月13日

  • 11:48 風呂の天井掃除して、エタノールで拭いた。
  • 13:11 SO905iCSクリスタルコートしなおした。すでに背面側に塗装が剥げてきているところがあるのだけれども。
  • 15:01 ようやく SP 最終回(録画)観た。
  • 21:32 GCALDaemon の mailterm 機能面白そう。
  • 21:40 この歳でまだ口笛が吹けない。[B!] 仕事中に口笛を吹いて、コンピューターにコマンドを実行させる http://tinyurl.com/4ry4yr

[ 4月13日全て ]

2008年5月28日 (水)

今日のさえずり - 100g 減る前にアタック買いだめ このエントリーを含むはてなブックマーク

@ 2008年05月26日

@ 2008年05月27日

@ 2008年05月28日


[ 5月28日全て ]

2008年8月8日 (金)

今日のさえずり - 「ドン吉くんの鳥グッズ展」終了間近 このエントリーを含むはてなブックマーク

naney:2742992871

@ 2008年08月06日

@ 2008年08月07日

  • 10:31 第1回 LEXER 賞が発表されました。
  • 11:36 これから八幡宿。[mb]
  • 12:27 イマココ! L:千葉駅[mb]
  • 19:26 普通見送って快速にしたけど、普通に乗った方がはやかった事が判明。L:蘇我駅[mb]
  • 19:58 そういえボーナスは明日支給らしい。[mb]
  • 20:02 車内の匂いが変わった。L:舞浜駅[mb]

@ 2008年08月08日


[ 8月8日全て ]

2008年8月20日 (水)

花輪ばやし 2008 2日目 このエントリーを含むはてなブックマーク

朝のうちは太陽も出ていたのに雷雨がきたり、雨が降ったり止んだり。 今年のお祭りは残念ながらあいにくの天気だ。

寝不足でぼーっとする頭を抱えながら、日中はお土産を買うにつきあってあんとらあ(道の駅)に行ったり、谷地田町の本部の近くにでていたワゴンで提灯根付を買ったりして過ごす。

夜に入って駅前に向かう屋台を見物。 いったん戻って風呂入って仮眠して、25:00ごろ赤鳥居詰めから帰ってきた屋台を御旅所前でまた見物。

屋台の通る秋田県道66号は拡幅工事により広くなったため、屋台が2台並べるようになった。 御旅所前では1台がゲオの横に入って上五町内(舟場元町・舟場町・新田町・六日町・谷地田町)5台が向いあわせになってお囃子の競演。

今年は冷雨ということもあり町踊りは無しになったらしい。

たまに Twitter をチェックしていたんだけれど、花輪ばやし関連でさえずっていた人は見当らず。


[ 8月20日全て ]

2008年8月31日 (日)

今日のさえずり - 昭和通りでホームレスがトロフィーかかげてる! このエントリーを含むはてなブックマーク

@ 2008年08月30日

naney:2813539762

@ 2008年08月31日

  • 09:07 昨日申し込んだ郵便の再配達がきた。これでちょっと気を抜ける。
  • 10:05 青空を見て、洗濯しかけてないの思い出した。しかし午後は雨の予報。
  • 12:07 シュウォッチ注文した。
  • 13:08 昨日と今日は大井どんたくか。
  • 16:24 午後ずっとプリント(写真)の整理してた。一段落ついたのでちょっと買い物行ってくる。[mb]
  • 16:44 大井どんたくはこれから歌謡ショーらしい。L:大井町[mb]
  • 17:05 [photo] 大井どんたく http://tinyurl.com/59upst
  • 17:06 今日はカボチャを煮ることにした。[mb]
  • 17:30 映画「20世紀少年」どうなん? ちょっと気になる。原作は読んだことない。
  • 19:03 みりんが大さじ1杯しかなかった。
  • 19:11 ちょっとグラッっとした。
  • 21:23 4食分ご飯炊いて3食分タッパーに入れたんだけれど、これ冷蔵でいいのかなぁ。冷凍?
  • 21:52 タッパーに入れた御飯の保存、冷蔵0 - 冷凍2 ですね。冷凍します。
  • 21:54 Twitter はお婆ちゃんの知恵袋だ。
  • 22:07 昨今の豪雨のせいか夜騒ぐやつが少なくていいな。そのかわり雨音や雷鳴が凄いわけだが。
  • 22:55 さて、風呂で R25 読むか。

[ 8月31日全て ]

2008年9月5日 (金)

今日のさえずり - 「ゑぶあぷり」って誤変換にしておくのは勿体ないな このエントリーを含むはてなブックマーク

@ 2008年09月04日

  • 09:43 急いでいるのか、下手なのか。今日の京浜東北線の発進・停止が荒い。[mb]
  • 11:34 Subversion リポジトリ間でのコピーをダンプ経由でやってみた。面倒。
  • 12:19 口内炎できた。噛んだりしてないからビタミン B2 不足かなぁ。独り身生活になってから毎朝食の目玉焼き食べてないし。
  • 12:26 あ、昼休みに R25 ぱらっとなめてしまった。風呂用なのに。
  • 12:54 男が「男性用化粧水を使うか、それとも彼女()の化粧水を拝借するか」でオフィスで盛り上がっている。
  • 13:21 @maru_kei 冬場の乾燥時期には男性諸君も化粧水を使うというのは一致。日焼け止めは(女性陣の予想に反して)男はあまり使わないで一致。
  • 15:46 GmailSMTP サーバ経由で送ったメールが「Sender address rejected: We can't receive FreeMail message」で拒否られた。SMTP サーバ変更して送り直せってか。面倒。
  • 17:16 ようやくメーラの設定変更してその拒否られたサーバ宛だけは別の SMTP サーバ経由で送るようにした。
  • 19:01 会社出た。暑さ落ち着いたけど、雨降るのかな。[mb]
  • 19:09 デブ用のズボンってポケットの容量もデカいのか。すごいな。[mb]
  • 19:42 初めて黒烏龍茶買ってみた。高いな。[mb]
  • 23:19 ほぼ日手帳2009注文した。ファブリックカバー・マキノ・ヘリンボーン。

@ 2008年09月05日

  • 08:24 8月13日の時点で 460 まで減らした follow 数だが、結局今 703 まで V 字回復。
  • 09:39 秋葉原昭和通り側の公園に消防車到着。L:秋葉原駅[mb]
  • 09:59 @ogochan 野次馬する前に出社してしまいました。救急車も来てましたね。
  • 12:43 久しぶりに mixi 招待権限発動させた。
  • 12:50 [B!] ですね、わかりますとは - はてなダイアリー http://tinyurl.com/69uzjm
  • 14:53 コンビニに耳栓買いにいったけれど無かったのでお茶買ってきた。スポーツ紙の「尿保管」ってこりゃまた。
  • 15:06 「ゑぶあぷり」って誤変換にしておくのは勿体ないな。
  • 16:38 Dsrfix で、Dell Dimension C521 の MBR を戻した。
  • 16:49 Dell PC リストア終了。
  • 21:14 ヨドバシカメラで耳栓購入。[mb]
  • 22:01 松屋。[mb]
  • 22:14 牛めしに、肉もご飯も見えないぐらいに全面山盛りに紅生姜をのせて食べている人がいて動揺している。[mb]
  • 22:23 あとちょっとなのに雨。[mb]

[ 9月5日全て ]

2008年9月25日 (木)

今日のさえずり - 鳩三郎が会社にきた このエントリーを含むはてなブックマーク

naney:2884331112

@ 2008年09月22日

  • 10:52 鶴見駅の駅ビル「つるみカミン」、2008年9月30日で閉店か。一時期 PRONTO でのアルバイトで毎日のように通っていたので感慨深い。
  • 12:25 食後のデザートにヤバケイのシェフ・アサヤマ 芦屋シューアイス。
  • 12:41 Twitter が駄目な時用に Wassr をケータイから使ってみておこうと思ったのだけれど、iモードID通知しない設定だとかんたんログインできないのか、コレ?
  • 19:57 モバイル Google マッブ 2.0.3 から 2.3.0 にあげた。バージョンアップは失敗するのでいったん削除してから。ケータイからストリートビュー凄いな。[mb]

@ 2008年09月23日

  • 25:22 AF-S NIKKOR 50mm f/1.4G 2008年12月発売。ついに 50mm も G タイプレンズか。
  • 11:14 メルパルクホール前。人だかりがいる。ハロプロイベントか。[mb]
  • 21:38 今日のメルパルクホールは「2008 ハロー!プロジェクト新人公演 9月~芝公園STEP!~」だったようだ。

@ 2008年09月24日

  • 09:24 あれ、新橋烏森口のキムラヤ閉まってる。まだ LABI にもなってなかったんだ。京浜東北線の車窓より。[mb]
  • 09:49 昨日の土曜日気分をのりきった。
  • 13:02 [photo] 鳩三郎が会社にきた http://tinyurl.com/4a7g22
  • 18:24 Google マップの乗り換え案内結果を Google カレンダーに流し込めないかなあ。
  • 18:29 @zakwa いつのまにシューアイス食べたんだ?
  • 20:18 みどりの窓口に2人も自動券売機の誘導・説明員立たせるなら、窓口増やせばいいのに。[mb]
  • 22:48 Dropbox で Show deleted files した時に表示される「新しいフォルダ」を purge できないのが気持ち悪い。

@ 2008年09月25日


[ 9月25日全て ]

スポンサード リンク

■よく検索されるキーワード

perl(62) torrent(54) linux(48) 提案書(47) windows(43) 書き方(41) 使い方(29) アジェンダ(26) x31(25) 充電式カイロ(25) cvs(22) インストール(20) サンプル(20) thinkpad(19) アジェンダとは(19) f-01a(18) wiki(17) c#(16) 感想(16) カイロ(16) usb(16) java(16) 秋葉原(15) debian(15) ヨドバシカメラ(15) subversion(15) 壁紙(15) 作り方(15) 静電気(14) apache(14) グッズ(14) デロンギ(13) フリー(13) sh-01a(13) ganttproject(13) 修理(13) ssh(12) svn(12) ヨドバシ(12) truecrypt(12) ダイソー(11) 手帳(11) activeperl(11) ubuntu(11) ほぼ日手帳(11) firefox(10) mew(10) mp980(10) ドラマ(10) 日本語(10) n-01a(10) google(10) tc-1(10) 評判(10) ツール(10) djunit(9) cgi(9) 動画(9) mp3(9) オイルヒーター(9) docomo(9) rcs(9) 除去(9) centos(9) メモリ(9) エネループ(9) 設定(9) p-01a(9) tortoisesvn(9) 無印(8) ケース(8) 口コミ(8) ミノルタ(8) メール(8) インストーラ(8) 会議(8) xampp(8) 加湿器(8) af(7) 値段(7)

この日記のはてなブックマーク数 Add to Google RSS

Process Time: 15.105491s / load averages: 0.25, 0.23, 0.18
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)