
ãé¢å¿ãã®ã¹ã³ã¢åæ¹æ³ïœ22幎ã©ã€ããã°ç ç©¶ïŒè«æè§£èª¬â ïŒã第4話ã
2004幎1æ10æ¥ãã22幎éã
ç§ã¯æ¥èšããã£ããã®ãã°ãèšé²ãç¶ããŠããŸããã
ç·æåæ°ã¯çŽ1550äžæåã
第3話ã§ã¯ããé¢å¿ã®å€åãã®å¯èŠåã«é¢ããç ç©¶ãåŠè¡è«æãšããŠãŸãšãã
å
¬éããããšãæžããŸããã
ä»åã¯ããã®è£åŽã
ãã®èšå€§ãªããã¹ãããŒã¿ããã©ã®ããã«ãé¢å¿ã¹ã³ã¢ãã«å€æããŠããã®ããæŽçããŸãã
â ãªããã¹ã³ã¢åããå¿ èŠãªã®ã
22幎åã®ãã°ã¯ãèªã¿è¿ãã°ãšããœãŒãã¯èŠã€ãããŸãã
ããããå
šäœåŸåã¯èŠããŸããã
ã20代ã¯å人ã®è©±ãå€ãã£ãæ°ãããã
ãïŒãªããšãªãã ãã©ïŒ
ã30代ã¯åã©ãã®è©±é¡ãå¢ããæ°ãããã
ãïŒãªããšãªãã ãã©ïŒ
ããããæèŠã
å¯èŠåã»ã¹ã³ã¢åãããŒã¿åæããŸããã
22幎åã®èšæ¶ãããã£ã1è¡ã®ã³ãŒãã§æ€çŽ¢ããåå·®å€ã§å¯èŠåããå¿«æãåŸãããŸãã

â åæã«äœ¿çšããçãã°
ç§èªèº«ã18ïœ40æ³ïŒ2004ïœ2025幎ïŒã®22幎éã«èšé²ããå人ã©ã€ããã°ïŒãã£ãããã°ïŒæ¥èšçïŒç·éçŽ1550äžæåïŒã䜿çšããŸããã
10äžåå°èª¬æç®ã§å°èª¬155ååã«çžåœããŸãã
ãã®ã©ã€ããã°ã¯æ¥ä»åäœã§æŽçãããŠããŸãã
ã察象ïŒ2004/1/10ïœ2025/8/20ïŒ7863æ¥åïŒ
ãå¹³åïŒ1,966å/æ¥
ãæå€§ïŒ77,308å/æ¥
ãæ¬ æïŒ16.56%
ãâ»æ¬ 枬æ¥ã®ã¹ã³ã¢ã«ã€ããŠã¯ïŒåïŒæ¥éã®å éç§»åå¹³åã«ããè£æ£ããªãããã°éã¯æ¥ããšã«å€§ããªã°ãã€ãããããŸãã
â çãã°ã®çµ±åäœæ¥ïŒäžåŠçïŒ
ç§ã®ã©ã€ããã°ã¯çŽ4000ãã¡ã€ã«ã«æž¡ããä¿å圢åŒããã©ãã©ã§ããã
ãã®ãããçãã°ããŒã¿ããPython3ç³»ã§21çš®ã®ã³ãŒããçšããŠã
çŽ3000äžã»ã«åïŒ35.5äžè¡Ã80åïŒã®1ãã¡ã€ã«ã«çµ±åããŸããã
ïŒéåžžã«å€§å€ïŒ
ããã«ãã圢æ
çŽ è§£æïŒJanomeïŒãã«ãããçãã°ãåèªããšã«åºåããŸããïŒãã¡ãã¯é£ããã®ã§è©³çްã¯çç¥ïŒã


# å®éã«äœ¿çšããã³ãŒãã®äžéšãæ²èŒããŸãïŒç°¡ç¥åïŒã
# chat_log_parser.py
import re # â
ãã®è¡ããã¡ã€ã«ã®å
é ã«è¿œå ããŸãâ
file_path = "20050112.txt"
try:
with open(file_path, 'r', encoding='cp932') as f:
first_line = f.readline()
log_date = first_line[8:18] # äŸ: '2005/01/12'
print(f"æœåºããæ¥ä»: {log_date}\n")
print("----- ããããåã¡ãã»ãŒãžã®æœåºçµæ -----")
all_chat_messages = []
chat_line_pattern = re.compile(r'^(\d{2}:\d{2})\s+\((.*?)\)\s*(.*)$')
for line in f:
stripped_line = line.strip() # è¡é ã»è¡æ«ã®ç©ºçœãæ¹è¡ãåé€
if not stripped_line: # 空çœè¡ã¯ã¹ããã
continue
match = chat_line_pattern.match(stripped_line)
if match:
time = match.group(1) # ã°ã«ãŒã1: æå»
speaker = match.group(2) # ã°ã«ãŒã2: 話è
message = match.group(3) # ã°ã«ãŒã3: ã¡ãã»ãŒãžæ¬æ
all_chat_messages.append({
'Date': log_date,
'Time': time,
'Speaker': speaker,
'Message': message
})
print(f"æ¥ä»: {log_date}, æå»: {time}, 話è
: {speaker}, ã¡ãã»ãŒãž: {message}")
else:
print(f"èŠå: ãã¿ãŒã³ã«ãããããªãè¡ãã¹ãããããŸãã -> {stripped_line}")
print(f"\nå
š{len(all_chat_messages)}ä»¶ã®ã¡ãã»ãŒãžããªã¹ãã«æ ŒçŽããŸããã")
except FileNotFoundError:
print(f"ãšã©ãŒ: ãã¡ã€ã« '{file_path}' ãèŠã€ãããŸããã")
except Exception as e:
print(f"ãã¡ã€ã«ã®èªã¿èŸŒã¿äžã«ãšã©ãŒãçºçããŸãã: {e}")â é¢å¿ã¹ã³ã¢å
é¢å¿é
ç®ã«é¢ããããŒã¯ãŒãèŸæžãšããŠã
ãã»åé¡èªåœè¡šïŒåœç«åœèªç ç©¶æïŒ2018ïŒ
ãã»æ¥æ¬èªWordNetïŒæ
å ±éä¿¡ç ç©¶æ©æ§ïŒ2010ïŒ
ãã»ç§åŠæè¡çšèªåœ¢æ
çŽ è§£æèŸæžïŒç§åŠæè¡æ¯èæ©æ§ïŒ2015ïŒ
ã«ããé¢å¿ããŒã¯ãŒãèŸæžãäœæããŸããã
ãããçšãã圢æ
çŽ è§£ææžã®ãã°ã®åé
ç®ããŒã¯ãŒãã®æ¥å¥åºçŸé »åºŠãç®åºãããé¢å¿ã¹ã³ã¢ããšããŸããã
ãïŒèªæ°ïŒ28,593èªãã¹ã³ã¢ïŒ71,219ç¹ïŒ
# å®éã«äœ¿çšããã³ãŒãã®äžéšãæ²èŒããŸãïŒç°¡ç¥åïŒã
import pandas as pd
import re
main_data_path = "C:/Users/ââ/chatlog_lifelog/Python/integrated_lifelog_data.csv"
dictionary_path = "C:/Users/ââ/99_detail_emotion_word.csv"
try:
df_integrated = pd.read_csv(main_data_path, encoding='utf-8-sig')
df_dictionary = pd.read_csv(dictionary_path, encoding='utf-8-sig')
print("çµ±åããŒã¿ãšèŸæžãã¡ã€ã«ãèªã¿èŸŒã¿ãŸããã")
print(f"çµ±åããŒã¿ã®è¡æ°: {len(df_integrated)}è¡")
print(f"èŸæžããŒã¿ã®è¡æ°: {len(df_dictionary)}è¡")
df_integrated['æ¥ä»'] = pd.to_datetime(df_integrated['æ¥ä»'], errors='coerce')
df_dictionary['ããŒã¯ãŒã'] = df_dictionary['ããŒã¯ãŒã'].astype(str).fillna('')
except FileNotFoundError as e:
print(f"ãšã©ãŒ: å¿
èŠãªãã¡ã€ã«ãèŠã€ãããŸããããã¹ã確èªããŠãã ãã: {e.filename}")
exit()
except Exception as e:
print(f"ããŒã¿ã®èªã¿èŸŒã¿äžã«ãšã©ãŒãçºçããŸãã: {e}")
exit()
print("\n--- ã¯ãŒãèŸæžãPythonã®èŸæžåœ¢åŒã«å€æããŸã ---")
keyword_dict = df_dictionary.groupby('ç¹å®ãžã£ã³ã«')['ããŒã¯ãŒã'].apply(list).to_dict()
text_columns = ['ç·åããã¹ã']
print("\n--- ç¹å®ããŒã¯ãŒãç¹åã¹ã³ã¢ã®äœæãéå§ããŸã ---")
for genre, keywords in keyword_dict.items():
pattern = '|'.join(keywords)
for text_col in text_columns:
score_col_name = f"{text_col}_{genre}_ã¹ã³ã¢"
text_series = df_integrated[text_col].fillna('')
df_integrated[score_col_name] = text_series.str.count(pattern, flags=re.IGNORECASE)
print(f"'{genre}'é¢é£ã¹ã³ã¢ã®äœæãå®äºããŸããã")
print("\n--- æ°ããäœæãããã¹ã³ã¢åã®æåã®5è¡ïŒäŸïŒ ---")
score_cols_to_show = [
'æ¥ä»', 'ç·åããã¹ã_ãã¿ã»å»æ£ç©ã»äžå»ã»ç£å»_ã¹ã³ã¢', 'ç·åããã¹ã_ã€ã³ãã¬ã»å€äžã»ç©äŸ¡é«éš°ã»ç©äŸ¡äžæ_ã¹ã³ã¢'
]
existing_cols_to_show = [col for col in score_cols_to_show if col in df_integrated.columns]
print(df_integrated[existing_cols_to_show].head())
output_path_with_keywords = main_data_path.replace('.csv', '_with_detail_emotion_scores.csv')
df_integrated.to_csv(output_path_with_keywords, index=False, encoding='utf-8-sig')
print(f"\næ°ãã远å ãããã¹ã³ã¢ãå«ãããŒã¿ã '{output_path_with_keywords}' ã«ä¿åããŸããã")
print("ãã®ããŒã¿ãä»åŸã®åæã«ãå©çšãã ããã")â é¢å¿ã«ããŽãªã®èšèš
åèªããã®ãŸãŸéèšããŠãæå³ã¯ãããŸããã
ããã§ããããããé¢å¿ã«ããŽãªïŒé
ç®ïŒãèšèšããŸããã
é¢å¿ã«ããŽãªïŒé
ç®ïŒã¯ãæåžã®åžæ°ã¢ã³ã±ãŒããšåãé
ç®ã«ããŸããã
ïŒããããã°ãåžæ°ã¢ã³ã±ãŒããšã®æ¯èŒãå¯èœã«ãªããã
ïŒé¢å¿é ç®ïŒäŸïŒïŒ
åã©ããå®¶æ å人ãç¥äºº äœå® ãåå°ããéã»è²¡ç£ã
å¥åº·ãä»äºãå®¶äºãå匷ãèåŸãçæŽ»ãè¶£å³ïœ¥å𝿥œã
ïŸïŸïœ°ïŸïœ¥ïŸïœŒïŸïœ¬ïœ° ãä¿¡ä»°ïœ¥å®æãæ¿æ²»ãïŸïŸïŸïŸïŸïœšïœ±ãå°å掻å
ååèªããããã®ã«ããŽãªã«çŽã¥ããŸãã
â æšæºåãšåå·®å€å
ãã°ã®éã¯æ¥ã«ãã£ãŠãã©ãã©ã§ãã
æ®éã«ãããšãããããæžããæ¥ã¯ã¹ã³ã¢ãé«ããªã£ãŠåœç¶ã
ããã§ãConstant-Sum Scalingããšããææ³ãçšãã
ãã®æ¥ã®å
šåèªã«å¯Ÿããåã«ããŽãªã®æ§ææ¯ãç®åºããŸããã
ïŒçµ±èšåŠã§ã¯ãæšæºåããšåŒã°ããŸãïŒ
ããã«ããã22幎éã®èªåãšæ¯èŒããŠãåå·®å€ãã«å€æããŸãã
ããã«ãããã22幎éã®èªåå²äžã仿¥ãã©ãã ãç¹å¥ã ã£ããã
ãªã©ã®ãã€ã©ã€ããæµ®ã圫ãã«ãªããŸãã
äŸãã°ãç§ã¯2008幎8æ21æ¥ã®ãå人ãã®é¢å¿ã®åå·®å€ã¯71ã§ããã
ãã®æ¥ã®ãã°ãèŠè¿ããšã
ã©ããããå
¬åå¡è©Šéšã«æçµåæ Œããæ¥ã§ãå人ãšãã®äŒè©±ãããŠããŸããã
ïŒã¡ãªã¿ã«ããã®æ¥ã®ãå®¶æãåå·®å€ã¯38ïŒ
ãå人ãã®é¢å¿åå·®å€71ã®æ¥ã®ãã°æç²ïŒåœæ23æ³ïŒ
--------2008/08/21 00:00:00 ãã°ãéå§
2008/8/21ãæšã19:51ãç§ããââåžã«åãã£ãã!
2008/8/21ãæšã19:52ãç§ããæ¥å¹Žããå·åŽã«äœã¿ãŸã
2008/8/21ãæšã19:52ãå人ããã
2008/8/21ãæšã19:52ãå人ããã£ããª
2008/8/21ãæšã19:52ãå人ãå·åŽã£ãŠã©ãã ïŒ
2008/8/21ãæšã19:52ãåäººãæšªæµã®èŸºãïŒ
2008/8/21ãæšã19:52ãç§ããæšªæµãšæ±äº¬ã®éã
2008/8/21ãæšã19:52ãç§ããã®ãªã®ãªç¥å¥å·ç
2008/8/21ãæšã19:52ãå人ããªãã»ã©
--------2008/08/22 00:00:00 ãã°ãçµäº
â»å¿åå å·¥æž
â éçã«ã€ããŠ
åœç¶ãªããããã®æ¹æ³ã«ã¯éçããããŸãã
åèªèŸæžèšèšã®æ£ææ§
æèã®ç¡èŠ
ç®èãæ¯å©ã®æ±ã
ããŒã¿ã®æ¬ ææéããããªã©
ããã®ãããããã¯ãå³å¯ãªå¿ç枬å®ãã§ã¯ãªããæ¢çŽ¢çãªå¯èŠåææ³ãšäœçœ®ã¥ããŠããŸãã
â çãã°éåç §ïŒãã¬ãŒãµããªãã£ïŒã®å¯èœæ§
ã¹ã³ã¢åŠ¥åœæ§æ€èšŒãšããŠãé¢å¿åå·®å€ãé«ãç¹å®æéã®çãã°ãéåç §ããæ¥æIDãçãã°IDãææ ã¹ã³ã¢IDãåé¢å¿ã¹ã³ã¢IDãããŒã«ã察象æ¥ååŸ7æ¥ã®çãã°ã確èªããŸããã
第1話ã§ãè§ŠããŸããããäŸãã°ã2009幎8æ4æ¥ã®é±ã¯ãå人ãåå·®å€91ã®ç°åžžå€ã§ããã22幎éã§åå·®å€80以äžã®é±ã¯11åã®ã¿ã§ããã
ããã¯çµ±èšåŠäžã¯åãªãç°åžžå€ïŒå€ãå€ïŒã§ããã
ã©ã€ããã°ã«ãããŠã¯ã決ããŠåãªãæ°å€ã§ã¯ãªãã
ãå¿ããŠãã芪åãšã®ç±ãäŒè©±ãã20幎è¶ãã«çºæããŠãããç¬éã
ã§ãã

åå·®å€ã®é«ãæ¥ã¯ãããããéåžžã«æ¿ãäŒè©±ïŒäŒè©±äŸãé³¥èç«ã€å±éããªã©ïŒãç¹°ãåºããããŠãŸããã
ã€ãŸããçãã°éåç
§ïŒãã¬ãŒãµããªãã£ææ³ïŒã掻çšããããšã§ãæèèŠå è¿œè·¡ã®æããããåŸãããšãå¯èœã§ãã
ãªããé«é¢å¿ïŒé«ææ ïŒããžãã£ãçºèšïŒãæœåºããã°ãè² ã®ç°åžžå€ããåé¿ããããšãå¯èœã§ãã
åŸæ¥ã®çµ±èšåæïŒãã¯ãåæïŒã§ã¯ãç°åžžå€ã¯ãå€ãå€ããšããŠé€å»ããããŸããçãã°ã®éåç
§ãäžå¯èœã§ããã
ã§ãããå人ãã°ïŒN=1ïŒã«ãããŠã¯ãç°åžžå€ã¯é¢å¿ãè·³ããç¬éã§ãããè¡åå€å®¹ãããŒãœãã©ã€ãºã®èµ·ç¹ãšããŠäŸ¡å€ãé«ããããããç°åžžå€ããæ¢çŽ¢ã®èµ·ç¹ãèŠå çè§£ãšãªãåŸãããšã瀺åãããŸããã
â æªæ¥ãžã®å±æ
ããã¯ãŸã 仮説段éã§ããã
RAGïŒRetrieval-Augmented GenerationïŒãAIãšãŒãžã§ã³ãã®é²å±ã¯ãã©ã€ããã°ãåäººã®æ€çŽ¢å¯èœãªè³æºãšããŠæ±ãæµãïŒGurrin et al.ïŒ2014ïŒãšãèŠªåæ§ãé«ããæ¬çš¿ã§ç€ºããN=1ç ç©¶ã®åçŸæ§ãšèç©å¯èœæ§ãé«ããåºç€æè¡ãšããŠæåŸ
ãããŸãã
ãŸããæ¬ç ç©¶ã§è©Šã¿ãæ¥å¥çãã°ã®éåç
§ã«ãããã¬ãŒãµããªãã£ãçºå±ãããããšã§ãN=1ããŒã¿ã®é·æä¿åãšé«ç²ŸåºŠãªæèæœåºãçµã¿åãããä»å
¥èšèšã®æ çµã¿ãæ§æ³ãåŸããšèããŠããŸãã
äŸãã°ä»åŸãããã°ã¯è²¡ç£ããšããèãæ¹ã®äžã§ãN=1ãã°äžã®ãé¢å¿ã®æºæ³ããããŒã¯ãŒãåæã«ãšã©ãŸããRAGçã§æèçã«æãèµ·ãããå人ã®å
çºçåæ©ä»ããä¿ãä»å
¥ãèããããŸãã
ããããAIã«ããä»å
¥ã¢ãã«ãšæ¬çš¿ã®ã¢ãã«ãçµã¿åããã人ã
ã®é¢å¿ã®ç¶æã»æ¡åŒµã«å¯Ÿãã广ãå®èšŒçã«æ€èšããããšã¯ãç€ŸäŒæ
å ±åŠã«ãããä»åŸã®éèŠãªèª²é¡ã®äžã€ãšãªãåŸããšèããŠããŸãã

â æ¬¡åã第5話ã
次åã¯ããé¢å¿ããšã¯å¥ã®ãããäžã€ã®è»žã§ãããææ
ã¹ã³ã¢ãã®ç®åºæ¹æ³ã§ãã
é¢å¿ãšææ
ã¯ã䌌ãŠããããã§ã
å®ã¯ãŸã£ããç°ãªãåããããŸãã
âŒç¬¬ïŒè©±ãææ ãã®ã¹ã³ã¢åæ¹æ³
âŒæ¬ã·ãªãŒãºã®èµ·ç¹ã第1話ã
ãhttps://note.com/lifelog_lab/n/n2f55c09c19bb
ãããããããã°ããã©ããŒããšãã¹ãããããã ãããšã
ãšãŠãå±ã¿ã«ãªããŸãã
âŒæ¥æ¬ã©ã€ããã°ç ç©¶æ â å ¬åŒãµã€ã
ã»å
¬åŒãµã€ãURLïŒ
ãhttps://wide-spirit-498.notion.site/346b4484a04880e8b4b7dbd94f9e602a