特定のフォーマットで書かれた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": "そんなに見てたんだ。暇なんだね。" } ] }


コメント