Sunday, 30 April 2023

twitter archive / Perl / GPT

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: