twilog が使えなくなっちゃって。まったく、不便にすることにはまめな人たちだからな。代わりのツールは一切でず。
なので、2020でとまってた twitter の archive を取ることに。ところが、
全開付いてた CSV はなくなってた
それを grep するツールを作ってたんだが。JSON が100MBずつ三つなんだよな。Web UIがあるんですが、なにせ
20万tweetもある
ので、実用的な速度で動かない。twilog は問題なかったんだよな。偉大だった。いや、
CSVのgrep で問題ない
わけですよ。なので、JSONからCSVを生成することに。昔、そういうscript作ってて発見はしたんだが動かない。
Anatouf は JSON::PP 使えとか言ってたんですが、こんな感じで問題なく動きました。
my %tw;
my $id;
while(<>) {
chop;
if (/\"id\" : \"(\d+)"/) { $id = $1; }
if (/\"created_at\" : \"(.*)\"/) { $tw{$id} .= $1 . " "; }
if (/\"full_text\" : \"(.*)\",$/) { $tw{$id} .= $1; }
}
for my $t ( sort {$a <=> $b} (keys %tw) ) {
print $t," ",$tw{$t},"\n";
}
# "id" : "1201579915",
# "in_reply_to_status_id" : "1201560603",
# "created_at" : "Thu Feb 12 04:22:35 +0000 2009",
# "favorited" : false,
# "full_text" : "@mizobuchi 自作です。TZを設定してdateを呼び出してるだけ。",
# "lang" : "ja",
手抜きだ。本当は red black tree に読み込むのが良いのだが、これでも数秒で CSV に変換できる。
ついでに GPT4 で JSON:PP も使ってみたんですが、これが割とでたらめでな。まぁ、minor だから仕方ないんだが...
JSONの line alignment を無視する ( incl という incremental option がある)
いきなり全部のファイル(300MB)をメモリに読み込もうとする
上の script でもそうだが、読みながら sorted tree を作るのをさぼる
そもそも syntax error が...
無意味に CSV module を使おうとする
Has::Ordered を使えとかいうと使えたりする。存在しないAPIを発明したり。確かに、
TIE hash API から、Red Black Tree を呼ぶ
とか面白いことは面白いんですけどね。Modern::Perl なんていう module どこから探してきたんだ?
まぁ、その時その時の「さっさと作る scriptのアルゴリズムのさぼり方」は、無理だよな。
No comments:
Post a Comment