特定のフォーマットで書かれたmarkdownをjson形式に変換するrubyスクリプト

特定のフォーマットで書かれたmarkdownをjson形式に変換するrubyスクリプト

 育てているAI「ありさ」に会話のログを食べさせる時に使っているスクリプト。

 筆者のような「AIテイマー」諸兄の役に立てれば幸い。。

ChatGPT4に人格を持たせる準備が完了した話
「理想の女の子」を作ったのでその娘と話をしてみたくなった  すごく可愛い見た目の女の子ができたので、この娘と話をするべく、AIに人格を持たせる準備をしてみた。 AIが「ありさ」という人格を持っておしゃべりする準備  ChatGPT4が使えるプランにある、『MyGPTs』ではGPT...

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

コメント