【Lifehacks】STOT形式データをTSV形式に加工する
■タスク
STOT形式データをTSV形式に加工する。
■背景
・特定ハッシュタグに関連付いた呟きを分析したい。
・別途取得したSTOT形式データを、分析しやすいようにTSV形式に加工したい。
■方法
PerlスクリプトによりTSV形式に加工します。
一旦TSV形式にすれば、Excelで分析したり二次加工するのも容易になります。
■仕様
・入・出力ファイルの文字コードはWindows-31J (CP932)とします。
・入力ファイルはSTOT (Share Twitter On Tumblr) 形式とします。
具体的には以下の形式です。
- 1件1行。
- 1件形式:USERID:TWEET [STATUSURL]
- USERID:TwitterユーザID。
- TWEET:呟き本体。
- STATUSURL:呟きのURL。
- STATUSURL形式:http://twitter.com/USERID/statuses/STATUSID
- STATUSID:呟きのID。
・出力ファイルはTSV形式とします。
具体的には以下の形式です。
- 1件1行。
- 1件形式:USERID
- USERID:TwitterユーザID。
- STATUSID:呟きのID。
- LENGTH:呟き文字数。
- TITLE:呟き仮タイトル。呟きの先頭20文字。
- TWEET:呟き本体。
■使用方法
> perl SgTwStotToTsv.pl < Input.txt > Output.txt
■プログラム
# # SgTwStotToTsv.pl # STOTからTSVに変換する。 # # Author: Orihika Ikuo # Create: 2009.09.28 twnovelオフ会対応やっつけ版。 # Update: 2009.10.07 修正版。 # ##### Pragma use strict; use warnings; use utf8; ##### Module use Encode; ##### Setting our $TITLE_LEN = 20; our $TAG = "#twnovel"; ##### Constant our $ENC_SJIS = ':encoding(:shiftjis)'; our $ENC_CP932 = ':encoding(:cp932)'; our $ENC_UTF8 = ':encoding(:utf8)'; our $ERR_ILL_FORMAT = "ERR: Illegal format."; # HTML Character entity reference our @ARY_HTML_CER = ('"', '&', '<', '>'); our @ARY_HTML_CER_ORG = ('"', '&', '<', '>' ); ##### Global binmode STDIN, $ENC_CP932; binmode STDOUT, $ENC_CP932; ##### Main routine &SgTwStotToTsv(); sub SgTwStotToTsv { my $dat_line; my $usr; my $tweet; my $status; my $len; my $title; my $title_wk; while ($dat_line = <STDIN>) { chomp($dat_line); # HTMLタグを除去する。 $dat_line =~ s/<.*?>//g; $dat_line = SgCmHtmlCerToOrg($dat_line); if ($dat_line =~ m/(^.*?):(.*) \[http.*?statuses\/(.*)\]/) { # ユーザID、呟き本体、呟きIDを取得。 $usr = $1; $tweet = $2; $status = $3; # 呟長を取得。 $len = length($tweet); # 呟きの先頭「$TITLE_LEN」文字を「タイトル」代わりに取得。 # 先頭にtwnovelタグがある場合は除く。 $title_wk = $tweet; if ($tweet =~ m/^$TAG (.*)/) { $title_wk = $1; } $title = substr($title_wk, 0, $TITLE_LEN); print STDOUT "$usr\t$status\t$len\t$title\t$tweet\n"; } else { print STDOUT "$ERR_ILL_FORMAT\n"; } } } # # HTML特殊文字の文字実態参照を元に戻す。 # sub SgCmHtmlCerToOrg { my $str = shift; my $i; for ($i = 0; $i < @ARY_HTML_CER; $i++) { $str =~ s/$ARY_HTML_CER[$i]/$ARY_HTML_CER_ORG[$i]/g; } return $str; }
■備考
・twnovelオフ会で回覧した分析資料や「All of twnovel 0001」は、このデータから製作しています。
・「Twitterの特定ハッシュタグの呟きを一括取得する」で取得したデータの一次加工方法を示しています。