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} に保存されました。"


コメント