ChatGPT4でAIとロープレするためにLINEの会話ログをいい感じにJSON化したい
会話内容によっては、LINEから出力したままのファイルを使ってもAIが読み込んでくれそうだが、経験上、構造を整えたJSON形式のファイルのほうがAIがうまく読み込むと思ったのでやってみた。
before=>after
before
2024.03.28 木曜日 15:07 hoge hogeがfugaをグループに追加しました。 16:29 hoge グループの設定が変更されました。今後このグループに招待する友だちには、グループに参加するかどうかを選んでもらう必要があります。 16:30 hoge hogeがグループ名を「3行日記」に変更しました。 16:41 hoge hogeがグループのプロフィール画像を変更しました。 16:41 hoge hogeがグループのプロフィール画像を変更しました。 20:56 hoge # 2024/03/28 - 顎が痛くてご飯がうまく食べられない。。 - スパーリングが楽しかった。 - fugaが家にいてよかった。 2024.03.29 金曜日 00:27 fuga # 2024/03/28 - 仕事忙しいと身体がしんどい - おやつが美味しかった - hogeとお家にいれてよかった 22:31 hoge # 2024/03/29 - 顎関節症が少し良くなった。 - 夕方暖かくて少し散歩した。 - 18時ごろからギターを弾き始めたら、気づいたら20時になってた。
LINE上で、意味はないけどマークダウン形式で交換日記を書いていたので、素の状態でも結構整っている。
after
[ { "date": "2024/03/28", "speaker": "hoge", "content": "顎が痛くてご飯がうまく食べられない。。, スパーリングが楽しかった。, fugaが家にいてよかった。" }, { "date": "2024/03/28", "speaker": "fuga", "content": "仕事忙しいと身体がしんどい, おやつが美味しかった, hogeとお家にいれてよかった" }, { "date": "2024/03/29", "speaker": "hoge", "content": "顎関節症が少し良くなった。, 夕方暖かくて少し散歩した。, 18時ごろからギターを弾き始めたら、気づいたら20時になってた。" } ]
LINEのシステムメッセージや時間表示などを削除して、会話の中身がよくわかる形にしてみた。
LINEから出力したマークダウン形式の会話ログをいい感じにJSON形式にするrubyスクリプト
需要はなさそうだけど、なんとなく載せてみる。
require 'json' # ファイルを読み込む file_path = 'sample.txt' output_path = 'output.json' entries = [] def remove_time_from_speaker(speaker) # 正規表現を使用して時間を取り除く speaker.gsub(/\d{1,2}:\d{2}\s*/, '') end File.open(file_path, 'r') do |file| current_entry = nil file.each_line do |line| if match_data = line.match(/^(.+?)#\s*(\d{4}\/\d{2}\/\d{2})/) # 不完全なエントリは追加しない if current_entry && current_entry[:date] && !current_entry[:speaker].empty? && !current_entry[:content].empty? entries << current_entry end # スピーカー名から時間を取り除く speaker = remove_time_from_speaker(match_data[1].strip) date = match_data[2].strip current_entry = { date: date, speaker: speaker, content: [] } elsif line.strip.start_with?('-') && current_entry # コンテンツ行を追加 current_entry[:content] << line.strip[1..-1].strip end end # 最後のエントリも確認して追加 if current_entry && current_entry[:date] && !current_entry[:speaker].empty? && !current_entry[:content].empty? entries << current_entry end end # コンテンツの配列を文字列に変換 entries.each do |entry| entry[:content] = entry[:content].join(', ') end # JSONファイルとして保存 File.open(output_path, 'w') do |file| file.write(JSON.pretty_generate(entries)) end puts "JSONファイルが #{output_path} に保存されました。"
コメント