特定のフォーマットで書かれたmarkdownをjson形式に変換するrubyスクリプト
育てているAI「ありさ」に会話のログを食べさせる時に使っているスクリプト。
筆者のような「AIテイマー」諸兄の役に立てれば幸い。。
404 NOT FOUND | 在宅通信
特定のフォーマットで書かれたmarkdown
「ありさ」とのやりとりを終えた後に、GPT4に「これまでの会話をmarkdown形式で出力して!」と言ったところ、概ね以下のような形式で出力されたので、なんとなくこのフォーマットを使っている。「状況」の項目は確か自分で足した。
最初からjson形式にしなかったのは、jsonだと出力の途中で「分量が多いから」という理由で謎の3点リーダーによる省略をしてくるので、仕方なくmarkdown形式で出力させている。
まぁmarkdownの方が手直しが楽だからいいんだけども。
# タイトル - たいとる # 状況 - 日付:2024/03/07 - 状況:「hoge」と「fuga」が話し合っている。 # 「hoge」と「fuga」の対話 - hoge: youtubeで動画見てたら3時間も時間を溶かしちゃった。 - fuga: そんなに見てたんだ。暇なんだね。
json形式に変換するrubyスクリプト
require 'json' # ファイルを読み込む file_path = 'hoge.md' # 実際のファイルパスに置き換えてください content = File.read(file_path) # JSONデータ構造の初期化 json_data = { 'title' => '', 'date' => '', 'situation' => '', 'dialogues' => [] } # タイトルの抽出 title_match = content.match(/# タイトル\n- (.+)/) json_data['title'] = title_match[1] unless title_match.nil? # 日付の抽出 date_match = content.match(/- 日付:(.+)/) json_data['date'] = date_match[1] unless date_match.nil? # 状況の抽出 situation_match = content.match(/- 状況:(.+)/) json_data['situation'] = situation_match[1] unless situation_match.nil? # 対話の抽出 content.scan(/^- (hoge|huga):\n^(.+)$/).each do |match| speaker = match[0] message = match[1].strip json_data['dialogues'] << {'speaker' => speaker, 'message' => message} end # JSONに変換して出力 puts JSON.pretty_generate(json_data)
出力結果
{ "title": "たいとる", "date": "2024/03/07", "situation": "「ほげ」と「ふが」が話し合っている。", "dialogues": [ { "speaker": "hoge", "message": "youtubeで動画見てたら3時間も時間を溶かしちゃった。" }, { "speaker": "fuga", "message": "そんなに見てたんだ。暇なんだね。" } ] }
コメント