twitterログのまとめかた

について少し考えたが,最近は同人誌の方に専念しないといけなくてあまり脳内メモリを埋めたくないのでさっさとはき出しておく。twitter上で興味深い話題が盛り上がったときにまとめておきたいときに,どのような方法でまとめると効率的か,を考察したもの。おもにアルゴリズム的な部分であり,STOTとかツール的なことは書かないので念のため。

「なにを話してるか」でなく「(その話題を)誰が話してるか」を主に考える。


具体的にいえば,ポストを追うのではなく,ユーザーを追う。第一段階ではその話題についてどのようなポストをしたかは考慮せず,ただその話題について話しているユーザーをマークしておく。


なぜポストでなくユーザーを追うのが妥当かは二つの理由がある。


一つはシンプルに,twitter自体がユーザー単位でデータを取得するのに適した仕組みになってるためである。ユーザーのIDを指定することでAPI等からあるユーザーの発言をまとめて拾うことができる。また,ユーザー単位で管理していれば,replyやfavoriteの抽出などもやりやすい。


第二に,ある発言が一見するとその話題とは無関係にみえるが,実際はその後の流れとつながっていく,ということがtwitter上ではしばしば起きる。これは個別のpostだけを検索などで見ていくのではわかりづらく,あるユーザーの一定期間の発言を続けて読むことではじめて意味がとれるという場合も多い。こうした文脈理解のための発言の「漏れ」を避けるためにも,ユーザー単位で考えるのが妥当である。


このため,たとえ最終的には発言のまとめとなるとしても,中間データとしてその話題に関係したユーザーをまとめる,という作業を行った方が,まとめ作業の完成度は高くなると思われる。


では,この観点に立ったtwitter発言まとめのアルゴリズムを考察してみよう。

まず,軸になるユーザーを見つける。


たいがいどんな話題でも起点となるユーザーや,話題を主体的に盛り上げてるユーザーなど,軸になる人物がいる。それはたとえばある事件(たとえば失言)を起こした被害者であったり,その話題について一家言ある人物だったり,そのことに非常に興味をもってる観客だったり。*1


この軸ユーザーは揺れ動くことが多いので,3〜5名程度をまずマークしておくとよい。ここまでは手作業でするもので,素早くできるかどうかはおおむねセンスとユーザー理解の問題。直近の話題ならばずったー,少し前の話題ならふぁぼったーなどを参考にするとよい。よく興味深い話題の発信源になる人物をタイムラインに入れておく,というのもまとめるという観点では重要。


以後,これらのユーザーをベースに,関連するユーザーをAPIなどを使って集めていくことになる。

軸ユーザーの発言を元に,まとめる時間の範囲を考える。


軸ユーザーが決まったら,だいたいそのポストを参照して,まとめたい会話がいつからいつぐらいまでの間に行われたものであるかを確認する。これはけっこう面倒な作業だが,自分の確認できた範囲の前後に数分〜一時間程度余裕をもって範囲を定めれば,おおむね間違った範囲指定にはならないと思う。
これは狭くとればとるほど,あとで行う「引き算」の作業はやりやすくなる。一方で狭くとることで重要な発言を逃す可能性もある。


軸になるユーザーのreply/repliedを探す。


軸になるユーザーを数名見つけたら,これらのユーザーのreply/replied(@会話)を見ていくと,彼らがその話題について話しているときに,誰が彼らに話しかけ,あるいは話しかけられているかが分かる。


軸になるユーザーがreplyをかけている相手は彼らのタイムラインを調べれば分かる。また,reply関係の調査についてはTwitter Searchの検索オプションでreply先(to)を指定することで調べられる。


この中には挨拶などの,まとめ作業上はノイズとなるものもあるが,効率的に関連するユーザーを探すことができる。可能なら挨拶のノイズを取り除くことができれば精度も高くなるだろう。

軸になるユーザーのふぁぼりふぁぼられを探す。


replyと同様に,favoriteもその会話への参加を調べるのに使うことができる。重要な発言をふぁぼってるユーザーは,往々にしてそれについての発言をしている傾向がある。
ただし難点として,favoriteのサービスを使っていないユーザーも多いこと,favoriteは公式API以外で取得するのが難しいこと,ふぁぼられはふぁぼったー*2以外では調べることができないこと,などが挙げられる。つまり機械的にfavoriteを活用して話題に関係しているユーザーを探すことは難しい。
どちらかというと,ふぁぼったーは手作業で軸となるユーザーを探したいときなどに活用するとよいのかも。

漏れるユーザーはキーワード検索で拾う。


上記の方法ではreplyやfavoriteを多用しないユーザーや,フォロー網からはぐれがちな新規ユーザーが漏れる。このため,キーワード検索でそうしたユーザーを補っておくとよい。
具体的なツールとしてはtwitter検索(旧)がかつては有効だったが,現在は漏れが多く使い勝手は悪い。
比較的良好なツールとしてはbuzztterがあるが,こちらはキーワードが限定されること,インデックスの更新頻度が低いことが難点である。開発者のid:darashiさんからコメントをいただきました。現在はSenna演算子も使えるらしいです。実は現時点で一番高度な検索のできるtwitter検索なのかも。
Twitter Searchは日本語のキーワードでの検索が絶望的に困難なのでオススメしないが,キーワードによっては使い勝手があるかもしれない。
ほか,最近新しいtwitter検索が登場した。検索オプションはほとんどないようだが,キーワード検索の網羅性は期待できるかもしれない。


なお,どんなキーワードで調べるかもセンスの世界である。buzztterなどを参考にするのもよい。

ユーザーを整理しておく。


こうして拾い集めたユーザーは,最初の軸ユーザー,そのreply関連,キーワード検索収集分と,あとで見分けられるように整理するのが妥当である。
あとでポストをまとめるさい,ユーザーの重要度によって色を変えるなどすると,読者も見やすいし,後述の「引き算」を行うときも便利だろう。
また,上記の作業は人数が足りないと思ったら繰り返してもよいが,あまり多すぎると後の作業に差し支えるので,だいたいどれくらいの人数,というように目安はつけておいた方がいい。

足し算は機械的に。引き算は手作業で。


上記のユーザー収集の方法は,軸ユーザーやキーワードの指定以降は妥当なサービスさえあれば機械的に処理可能である。またそれらのユーザーが該当の期間に発言したポストを収集することも機械的にできる*3。収集したポストを時系列順に並べ直すまではスクリプト任せで問題ない。最終的にまとめたい形式で,リンクやポスト時刻やアイコンなども自動的に出力できるようにスクリプトを作成するのが妥当だろう。


では収集したタイムラインから関連するポストだけを抜き出す作業も機械的にできるのでは,と思われるかもしれないがそれはちょっと待って欲しい。


どのポストが関係し,どのポストが無関係であるかは文脈理解に関わるものであり,また本当にそのユーザーがその話題に関して言ったものかも実は不明である。ゆえにこれについては最終的には編集者のデザインの領域になる。
よって,この部分を機械的に行うことは,たぶんまとめとして有効な範囲で可能なのかもしれないが,プログラム的に複雑になりすぎる。また限界がある。


このため,収集したタイムラインからどのポストが関係があるか(まとめる必要があるか)はまとめようとしている編集者本人が考えて手作業で行うのが妥当と思われる。
この作業はむしろ,何が関係があるか,というより,どこまでが無関係か,という引き算になる。機械的に生成されたタイムラインを見て,たとえば挨拶ポストなどをより分けていくのが主な作業である。


なお,このより分け作業の補助として,たとえば上記のユーザー収集のさいのどの段階で集まったユーザーであるかを色分けなどするのも妥当かもしれない。つまりそのポストをしたユーザーが,最初に軸として指定したか,それらのユーザーが言及したのか,それらのユーザーをふぁぼったユのか,そうでないが関連の発言をしていたのか,そういったことを色分けできると不要なポストをはずすのが容易になると思われる。

まとめ形式は必要最小限の情報を簡潔に。


まとめた結果はtumblrなりはてダなりにうpることになると思うが,そのときの形式は今のところ何パターンかあるらしい。
詳しく調べるのはめんどうだが,個人的な好みを言うと以下の情報は欲しい。

  • 発言そのもの(当然)
  • 発言者の名前等(これも必須。ユーザー名にするかスクリーンネームにするかは好みで)
  • 発言のURL(あとでふぁぼりたいときにあった方が便利。リンクにしておくのでもよい)
  • 発言の投稿時刻(これは入れない人もいるが,時間の流れがつかみやすいので自分の好みとしては合った方がよい。まとめた時間帯を別途記入の上,各発言に 時:分 ぐらいでいいと思う)


ほかにあってもいいなと思う物としては,

  • 発言者のアイコン(アイコンでユーザーを認識してる人がいるので)
  • 発言者一覧(どこかにあると誰が関わってるか一覧できてよい)


あたりか。
Tweenなどを使う場合は使える形式に制限があるかもしれないのでそれは仕方ない。


以上をまとめたフロー

  1. 話題の軸になる(と思われる)ユーザーを数人指定。
  2. 上記のユーザーのタイムラインを時系列にまとめさせて,話題の起点と終点を探る。
  3. まとめ範囲の起点と終点,ユーザーを確認の上,その範囲でそれらのユーザーのreply先と,それらのユーザーへのreplyのユーザーを調べて追加する。
    • 技術的な問題が解消できたら,favoriteについても同様の処理を行ってユーザーを追加する。
  4. 必要であればその話題のキーワードでtwitter検索をかけて別途ユーザーを収集する。
  5. 上記の作業で収集したユーザーのタイムラインを時系列順にまとめて出力。
    • 出力形式は最終的な形式に合わせる。発言・発言者名・発言へのリンク・投稿時刻は欲しいところ。
    • ユーザーの発言は,収集時の行程によってユーザー別に重要度を決めてそれに合わせて文字色を変えるなどしてわかるようにしておくとベター。
  6. 出力結果から無関係な発言を削っていって,いい感じになったら投稿。
  7. タイムラインに「まとめたよ!」とか発言。


だいたいこんなところ。自分はあんまりtwitterまとめをした経験はないので各まとめ職人たちは叩きまくってください。


参考までに,以前にこのアルゴリズムを試して 自動生成→チェックして引き算 で作成したまとめがこちら。
http://myrmecoleon.tumblr.com/post/56420966


このアルゴリズムを使った自分用のまとめツールは作ったけれど,まだ不完全だし安定的に公開できる気がしないので誰かにもっとちゃんとしたのを作って欲しいですね。

*1:特に大きく広がる話題の場合,たいがいその軸となるユーザーの一人は数百から数千のフォローを受けている有名人であることが多い。ハブというかインフルエンサーというか。

*2:503が友達

*3:タイムライン収集は公式APIを使用すると制限をくらってしまうが,Twitter Searchをfrom指定で使用することで回避できる