kakao-analyzer


Namekakao-analyzer JSON
Version 1.0.2 PyPI version JSON
download
home_pagehttps://github.com/xistoh162108/kakaotalk_analyzer
SummaryComprehensive analysis tool for KakaoTalk chat exports
upload_time2025-08-14 08:53:30
maintainerNone
docs_urlNone
authorxistoh162108, Claude AI
requires_python>=3.8
licenseMIT
keywords kakao kakaotalk chat analysis nlp korean messaging
VCS
bugtrack_url
requirements pandas numpy matplotlib seaborn wordcloud scikit-learn sentence-transformers torch transformers chardet tqdm requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ๐Ÿ”ฅ ์นด์นด์˜คํ†ก ๋Œ€ํ™” ๋ถ„์„๊ธฐ (Kakao Talk Analyzer)

[![PyPI version](https://badge.fury.io/py/kakao-analyzer.svg)](https://badge.fury.io/py/kakao-analyzer)
[![Python versions](https://img.shields.io/pypi/pyversions/kakao-analyzer.svg)](https://pypi.org/project/kakao-analyzer/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Downloads](https://pepy.tech/badge/kakao-analyzer)](https://pepy.tech/project/kakao-analyzer)

> ์นด์นด์˜คํ†ก ๋Œ€ํ™” ๋‚ด๋ณด๋‚ด๊ธฐ CSV ํŒŒ์ผ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•˜๋Š” **์ฐจ์„ธ๋Œ€ AI ๊ธฐ๋ฐ˜** ์˜ฌ์ธ์› ๋„๊ตฌ

```bash
pip install kakao-analyzer
```

**๐ŸŽฏ ์นด์นด์˜คํ†ก์˜ ํŠน์„ฑ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ์Šค๋งˆํŠธ ๋ถ„์„๊ธฐ**
- ์—ฐ์† ๋ฉ”์‹œ์ง€ ์ž๋™ ๊ทธ๋ฃนํ•‘ (1๋ถ„ ์ด๋‚ด ๋ฉ”์‹œ์ง€ ํ†ตํ•ฉ)
- ํ•œ๊ตญ์–ด ์ฑ„ํŒ… ํŒจํ„ด ์ธ์‹ (ใ…‹ใ…‹, ใ… ใ… , ์ด๋ชจํ‹ฐ์ฝ˜ ๋“ฑ)
- ์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ์ž๋™ ํ•„ํ„ฐ๋ง (์‚ญ์ œ๋œ ๋ฉ”์‹œ์ง€, ํˆฌํ‘œ, ์ •์‚ฐ ๋“ฑ)
- ์‹ค์ œ ๋Œ€ํ™”๋งŒ ๋ถ„์„ํ•˜์—ฌ ๋” ์ •ํ™•ํ•œ ์ธ์‚ฌ์ดํŠธ ์ œ๊ณต

## ๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

### ๐ŸŽฏ **์นด์นด์˜คํ†ก ํŠนํ™” ๊ธฐ๋Šฅ** โญ NEW!
- **์Šค๋งˆํŠธ ๋ฉ”์‹œ์ง€ ๊ทธ๋ฃนํ•‘**: 1๋ถ„ ์ด๋‚ด ์—ฐ์† ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์‹ค์ œ ์˜๋„ ํŒŒ์•…
- **ํ•œ๊ตญ์–ด ์ฑ„ํŒ… ํŒจํ„ด ๋ถ„์„**: ใ…‹ใ…‹, ใ…Žใ…Ž, ใ… ใ… , ใ…‡ใ…‹ ๋“ฑ ํ•œ๊ตญ์ธ์˜ ์ฑ„ํŒ… ์Šต๊ด€ ์ธ์‹
- **์‹œ์Šคํ…œ ๋ฉ”์‹œ์ง€ ํ•„ํ„ฐ๋ง**: ์‚ญ์ œ๋œ ๋ฉ”์‹œ์ง€, ํˆฌํ‘œ, ์ •์‚ฐ, ์ž…์žฅ/ํ‡ด์žฅ ์•Œ๋ฆผ ์ž๋™ ์ œ๊ฑฐ
- **๋ฉ˜์…˜ ๋ถ„์„**: @ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ ์‚ฌ์šฉ์ž ์–ธ๊ธ‰ ํŒจํ„ด๊ณผ ๋„คํŠธ์›Œํฌ ๋ถ„์„
- **๊ฐ์ • ํ‘œํ˜„ ๋ถ„์„**: ์›ƒ์Œ, ์Šฌํ””, ๋™์˜ ํ‘œํ˜„ ๋“ฑ์˜ ๊ฐ์ • ํŒจํ„ด ์ถ”์ 

### ๐Ÿ“Š ๊ธฐ๋ณธ ํ†ต๊ณ„ ๋ถ„์„
- **์‚ฌ์šฉ์ž๋ณ„ ํ™œ๋™ ํ†ต๊ณ„**: ๋ฉ”์‹œ์ง€ ์ˆ˜, ์ฐธ์—ฌ์œจ, ์ผํ‰๊ท  ํ™œ๋™๋Ÿ‰
- **์‹œ๊ฐ„์  ํŒจํ„ด ๋ถ„์„**: ์‹œ๊ฐ„๋Œ€๋ณ„, ์š”์ผ๋ณ„, ์›”๋ณ„ ํ™œ๋™ ๋ถ„ํฌ  
- **๋‹จ์–ด ๋นˆ๋„ ๋ถ„์„**: ํ•œ๊ตญ์–ด ํ˜•ํƒœ์†Œ ๋ถ„์„ ๋ฐ ํ‚ค์›Œ๋“œ ์ถ”์ถœ
- **๋ฉ”์‹œ์ง€๋ณ„ ๋‹จ์–ด ์ˆ˜ ํ†ต๊ณ„**: ์›๋ณธ ๋ฐ ํ•„ํ„ฐ๋ง๋œ ๋‹จ์–ด ์ˆ˜ ๋ถ„์„ (ํ‰๊ท , ์ค‘๊ฐ„๊ฐ’, ์ตœ๋Œ€๊ฐ’)
- **์ด๋ชจํ‹ฐ์ฝ˜/์ด๋ชจ์ง€ ์‚ฌ์šฉ ํ†ต๊ณ„**: ๋ฐ˜์‘ ํŒจํ„ด ๋ถ„์„

### ๐Ÿ’ฌ ๋Œ€ํ™” ์—ญํ•™ ๋ถ„์„
- **๋Œ€ํ™” ํ„ด ๋ถ„์„**: ์ž๋™ ๋Œ€ํ™” ์„ธ์…˜ ๊ตฌ๋ถ„
- **์ฃผ์ œ ์ „ํ™˜ ํƒ์ง€**: ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ์ฃผ์ œ ๋ณ€ํ™” ๊ฐ์ง€
- **์ฐธ์—ฌ์ž ํŒจํ„ด**: ๋Œ€ํ™” ์‹œ์ž‘์ž, ์‘๋‹ต์ž ๋ถ„์„ (์‹œ์ž‘ ํšŸ์ˆ˜ ์ˆœ์œผ๋กœ ์ •๋ ฌ)
- **์ƒํ˜ธ์ž‘์šฉ ๋ถ„์„**: ์‚ฌ์šฉ์ž ๊ฐ„ ์†Œํ†ต ํŒจํ„ด
- **๋ฉ˜์…˜ ๋„คํŠธ์›Œํฌ ๋ถ„์„**: @ ๋ฉ˜์…˜์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ๊ฐ„ ์–ธ๊ธ‰ ๊ด€๊ณ„ ๋ฐ ์ƒํ˜ธ ๋ฉ˜์…˜ ๋ถ„์„

### ๐ŸŽฏ ์žฌ๋ฏธ์žˆ๋Š” ์ง€ํ‘œ
- **์ฐธ์—ฌ ๋ถˆํ‰๋“ฑ**: ์ง€๋‹ˆ ๊ณ„์ˆ˜๋ฅผ ํ†ตํ•œ ๋ฐœ์–ธ๊ถŒ ๋ถ„์„
- **๋‹ต์žฅ ์†๋„**: ๋ฐ˜์‘ ์‹œ๊ฐ„ ํ†ต๊ณ„ ๋ฐ ๋ถ„ํฌ
- **ํ™œ๋™ ์—ฐ์†์„ฑ**: ์—ฐ์† ๋ฉ”์‹œ์ง€ ๋ฐ ํ™œ๋™์ผ ๋ถ„์„
- **์‹ฌ์•ผ ์ฑ„ํŒ…**: ๋ฐค์ƒ˜ ๋Œ€ํ™” ํŒจํ„ด ๋ถ„์„

### ๐Ÿ” ๊ณ ๊ธ‰ ๋ถ„์„
- **์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ์ฃผ์ œ ๋ถ„์„**: ์˜๋ฏธ๋ก ์  ์œ ์‚ฌ๋„๋ฅผ ํ†ตํ•œ ์ฃผ์ œ ์„ธ๊ทธ๋จผํŠธ
- **SPLADE ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰**: Dense + Sparse ๋ฒกํ„ฐ๋ฅผ ํ™œ์šฉํ•œ ๋Œ€ํ™” ๊ฒ€์ƒ‰
- **์‹œ๊ณ„์—ด ๋ถ„์„**: ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋Œ€ํ™” ํŒจํ„ด ๋ณ€ํ™”
- **๊ฐ์ • ๋ถ„์„**: ๋Œ€ํ™” ๋ถ„์œ„๊ธฐ์™€ ๊ฐ์ • ํŒจํ„ด ์ถ”์ 
- **์Šค๋งˆํŠธ ํ† ํ”ฝ ํด๋Ÿฌ์Šคํ„ฐ๋ง**: ๊ณ ๊ธ‰ ์ฃผ์ œ ๋ถ„๋ฅ˜ ๋ฐ ํ…Œ๋งˆ ๋ถ„์„
- **๋Œ€ํ™” ๋ฆฌ๋“ฌ ๋ถ„์„**: ์‘๋‹ต ํŒจํ„ด๊ณผ ์‹œ๊ฐ„์  ๋ฆฌ๋“ฌ ๋ถ„์„
- **๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์…‹ ์ตœ์ ํ™”**: ์ง€๋Šฅํ˜• ์ฒญํ‚น๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

### ๐Ÿ“ˆ ์‹œ๊ฐํ™” (๊ฐœ์„ ๋จ!)
- **ํ™œ๋™ ํžˆํŠธ๋งต**: ์‹œ๊ฐ„๋Œ€ ร— ์š”์ผ ํ™œ๋™ ๋ถ„ํฌ
- **์ผ๋ณ„ ํƒ€์ž„๋ผ์ธ**: ๋ฉ”์‹œ์ง€ ์ˆ˜ ์ถ”์ด ๊ทธ๋ž˜ํ”„
- **์ฃผ์ œ ํƒ€์ž„๋ผ์ธ**: ์ฃผ์ œ ์„ธ๊ทธ๋จผํŠธ ์‹œ๊ฐํ™” (๊ฒน์นจ ๋ฌธ์ œ ํ•ด๊ฒฐ)
- **์›Œ๋“œํด๋ผ์šฐ๋“œ**: ํ•œ๊ตญ์–ด ํฐํŠธ ์ง€์›์œผ๋กœ ๊นจ์ง ํ˜„์ƒ ํ•ด๊ฒฐ
- **์‚ฌ์šฉ์ž ํ™œ๋™ ์ฐจํŠธ**: ๋งŽ์€ ์‚ฌ์šฉ์ž๋„ ๊น”๋”ํ•˜๊ฒŒ ํ‘œ์‹œ (๊ฒน์นจ ๋ฌธ์ œ ํ•ด๊ฒฐ)

## ๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐ ์‹คํ–‰

### ๐Ÿ“ฆ PyPI๋ฅผ ํ†ตํ•œ ๊ฐ„ํŽธ ์„ค์น˜ (๊ถŒ์žฅ)

```bash
# ๊ธฐ๋ณธ ์„ค์น˜
pip install kakao-analyzer

# ์ „์ฒด ๊ธฐ๋Šฅ ์„ค์น˜ (AI ๋ชจ๋ธ ํฌํ•จ)
pip install kakao-analyzer[full]

# ๊ฐœ๋ฐœ ๋„๊ตฌ ํฌํ•จ ์„ค์น˜
pip install kakao-analyzer[dev]
```

์„ค์น˜ ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ:
```bash
kakao-analyzer --input your_chat.csv
```

### ๐Ÿ’ป ๊ฐœ๋ฐœ์ž์šฉ ์„ค์น˜

๊ฐœ๋ฐœ์ด๋‚˜ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์„ ์›ํ•œ๋‹ค๋ฉด:

```bash
# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/xistoh162108/kakaotalk_analyzer.git
cd kakaotalk_analyzer

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์„ค์น˜
pip install -e .
```

### ๐Ÿ“‹ ์š”๊ตฌ์‚ฌํ•ญ
- **Python**: 3.8 ์ด์ƒ
- **์šด์˜์ฒด์ œ**: Windows, macOS, Linux ๋ชจ๋‘ ์ง€์›
- **๋ฉ”๋ชจ๋ฆฌ**: ์ตœ์†Œ 4GB RAM (๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋Š” 8GB+ ๊ถŒ์žฅ)

## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

### 1๋‹จ๊ณ„: ์„ค์น˜
```bash
pip install kakao-analyzer
```

### 2๋‹จ๊ณ„: ์นด์นด์˜คํ†ก ๋Œ€ํ™” ๋‚ด๋ณด๋‚ด๊ธฐ
1. ์นด์นด์˜คํ†ก ์•ฑ์—์„œ ๋ถ„์„ํ•˜๊ณ  ์‹ถ์€ ๋Œ€ํ™”๋ฐฉ ์—ด๊ธฐ
2. `โ˜ฐ` ๋ฉ”๋‰ด โ†’ `์ฑ„ํŒ…๋ฐฉ ์„ค์ •` โ†’ `๋Œ€ํ™” ๋‚ด์šฉ ๋‚ด๋ณด๋‚ด๊ธฐ`
3. `ํ…์ŠคํŠธ ํŒŒ์ผ(.txt)` ์„ ํƒํ•˜์—ฌ ๋‚ด๋ณด๋‚ด๊ธฐ
4. ๋‚ด๋ณด๋‚ธ ํŒŒ์ผ์„ CSV ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ (๋˜๋Š” ์ง์ ‘ CSV๋กœ ์ค€๋น„)

### 3๋‹จ๊ณ„: ๋ถ„์„ ์‹คํ–‰
```bash
# ๊ธฐ๋ณธ ๋ถ„์„
kakao-analyzer --input your_chat.csv

# ๊ณ ๊ธ‰ AI ๋ถ„์„ ํฌํ•จ (๊ถŒ์žฅ)
kakao-analyzer --input your_chat.csv --use-splade --use-ollama
```

### โœจ ์‚ฌ์šฉ๋ฒ•
```bash
# ๊ธฐ๋ณธ ๋ถ„์„ (๊ฐ€์žฅ ๊ฐ„๋‹จ)
kakao-analyzer --input chat.csv

# ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ ์ง€์ •
kakao-analyzer --input chat.csv --outdir my_analysis

# ๋„์›€๋ง ๋ณด๊ธฐ
kakao-analyzer --help
```

### ๐Ÿ› ๏ธ ๊ณ ๊ธ‰ ์˜ต์…˜
```bash
kakao-analyzer --input INPUT [์˜ต์…˜๋“ค]

ํ•„์ˆ˜ ์˜ต์…˜:
  --input INPUT                ์ž…๋ ฅ CSV ํŒŒ์ผ ๊ฒฝ๋กœ

๋ถ„์„ ์˜ต์…˜:
  --window-minutes MINUTES     ๋Œ€ํ™” ํ„ด ๊ตฌ๋ถ„ ์‹œ๊ฐ„ (๊ธฐ๋ณธ๊ฐ’: 30๋ถ„)
  --topic-window-size SIZE     ์ฃผ์ œ ๋ถ„์„ ์œˆ๋„์šฐ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ’: 15)
  --similarity-threshold FLOAT ์œ ์‚ฌ๋„ ์ž„๊ณ„๊ฐ’ (๊ธฐ๋ณธ๊ฐ’: 0.3)
  --batch-size SIZE            ์ž„๋ฒ ๋”ฉ ๋ฐฐ์น˜ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ’: 32)
  --max-workers WORKERS        ์ตœ๋Œ€ ๋ณ‘๋ ฌ ์ž‘์—… ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 4)

AI ๋ชจ๋ธ ์˜ต์…˜:
  --use-ollama                 Ollama ์ž„๋ฒ ๋”ฉ ์‚ฌ์šฉ (๋กœ์ปฌ)
  --model-name MODEL           Ollama ๋ชจ๋ธ๋ช… (๊ธฐ๋ณธ๊ฐ’: gpt-oss:20b)
  --embed-model MODEL          ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ๋ช… (๊ธฐ๋ณธ๊ฐ’: bge-m3)
  --use-splade                 SPLADE ํฌ์†Œ ๊ฒ€์ƒ‰ ํ™œ์„ฑํ™”

๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์˜ต์…˜:
  --subset-size SIZE           ํ…Œ์ŠคํŠธ์šฉ ๋ถ€๋ถ„์ง‘ํ•ฉ ํฌ๊ธฐ  
  --subset-strategy STRATEGY   ๋ถ€๋ถ„์ง‘ํ•ฉ ์ „๋žต (balanced/temporal/diverse/random)

์นด์นด์˜คํ†ก ํŠนํ™” ์˜ต์…˜:
  --disable-message-grouping   ์—ฐ์† ๋ฉ”์‹œ์ง€ ๊ทธ๋ฃนํ•‘ ๋น„ํ™œ์„ฑํ™” (๋น„์ถ”์ฒœ)
  --group-window-seconds N     ๋ฉ”์‹œ์ง€ ๊ทธ๋ฃนํ•‘ ์‹œ๊ฐ„ ์ฐฝ (๊ธฐ๋ณธ๊ฐ’: 60์ดˆ)

์ถœ๋ ฅ ์˜ต์…˜:
  --outdir DIRECTORY           ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ
  --figure-dpi DPI             ๊ทธ๋ž˜ํ”„ ํ•ด์ƒ๋„ (๊ธฐ๋ณธ๊ฐ’: 300)
  --log-level LEVEL            ๋กœ๊ทธ ๋ ˆ๋ฒจ (DEBUG/INFO/WARNING/ERROR)
  --quiet                      ์ฝ˜์†” ์ถœ๋ ฅ ์–ต์ œ
  --skip-viz                   ์‹œ๊ฐํ™” ์ƒ์„ฑ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
```

### ๐Ÿ’ก ์‚ฌ์šฉ ์˜ˆ์ œ
```bash
# ๐ŸŒŸ ๊ธฐ๋ณธ ๋ถ„์„ (์ถ”์ฒœ)
kakao-analyzer --input chat.csv

# ๐Ÿค– AI ๊ธฐ๋Šฅ ์ „์ฒด ํ™œ์šฉ
kakao-analyzer --input chat.csv --use-splade --use-ollama --model-name "gpt-oss:20b"

# ๐Ÿ“Š ํŠน์ • ๋””๋ ‰ํ† ๋ฆฌ์— ๊ฒฐ๊ณผ ์ €์žฅ
kakao-analyzer --input chat.csv --outdir my_results

# โšก ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋น ๋ฅธ ํ…Œ์ŠคํŠธ
kakao-analyzer --input big_chat.csv --subset-size 1000 --subset-strategy balanced

# ๐Ÿ”ง ์„ธ๋ฐ€ํ•œ ์„ค์ • ์กฐ์ •
kakao-analyzer --input chat.csv --topic-window-size 20 --similarity-threshold 0.4

# ๐ŸŽจ ๊ณ ํ•ด์ƒ๋„ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
kakao-analyzer --input chat.csv --figure-dpi 600

# ๐Ÿ”‡ ์กฐ์šฉํ•œ ์‹คํ–‰ (CI/CD์šฉ)
kakao-analyzer --input chat.csv --quiet --skip-viz --log-level ERROR
```

## ๐Ÿ“ ์ถœ๋ ฅ ๊ตฌ์กฐ

๋ถ„์„ ์™„๋ฃŒ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค:

```
output_directory/
โ”œโ”€โ”€ summary/                    # ์š”์•ฝ ์ •๋ณด
โ”‚   โ”œโ”€โ”€ analysis_summary.json   # ์ „์ฒด ๋ถ„์„ ์š”์•ฝ
โ”‚   โ””โ”€โ”€ processed_messages.csv  # ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€ ๋ฐ์ดํ„ฐ
โ”œโ”€โ”€ basics/                     # ๊ธฐ๋ณธ ํ†ต๊ณ„
โ”‚   โ””โ”€โ”€ basic_statistics.json   # ์ƒ์„ธ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ
โ”œโ”€โ”€ context/                    # ๋งฅ๋ฝ ๋ถ„์„
โ”‚   โ”œโ”€โ”€ topic_segments.json     # ์ฃผ์ œ ์„ธ๊ทธ๋จผํŠธ ๋ฐ์ดํ„ฐ
โ”‚   โ”œโ”€โ”€ topic_segments.csv      # ์ฃผ์ œ ์„ธ๊ทธ๋จผํŠธ ํ…Œ์ด๋ธ”
โ”‚   โ”œโ”€โ”€ mood_analysis.json      # ๊ฐ์ • ๋ฐ ๋ถ„์œ„๊ธฐ ๋ถ„์„
โ”‚   โ”œโ”€โ”€ advanced_topics.json    # ๊ณ ๊ธ‰ ์ฃผ์ œ ํด๋Ÿฌ์Šคํ„ฐ๋ง
โ”‚   โ”œโ”€โ”€ rhythm_analysis.json    # ๋Œ€ํ™” ๋ฆฌ๋“ฌ ๋ถ„์„
โ”‚   โ”œโ”€โ”€ mention_analysis.json   # ๋ฉ˜์…˜ ํŒจํ„ด ๋ฐ ๋„คํŠธ์›Œํฌ ๋ถ„์„
โ”‚   โ”œโ”€โ”€ hybrid_index.meta.json  # ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค (SPLADE)
โ”‚   โ””โ”€โ”€ splade_scores.parquet   # ํฌ์†Œ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ (SPLADE)
โ”œโ”€โ”€ fun/                        # ์žฌ๋ฏธ ์ง€ํ‘œ
โ”‚   โ””โ”€โ”€ fun_metrics.json        # ์ฐธ์—ฌ ๋ถˆํ‰๋“ฑ, ๋‹ต์žฅ ์†๋„ ๋“ฑ
โ”œโ”€โ”€ figures/                    # ์‹œ๊ฐํ™”
โ”‚   โ”œโ”€โ”€ heatmap_hour_weekday.png
โ”‚   โ”œโ”€โ”€ timeseries_daily.png
โ”‚   โ”œโ”€โ”€ topic_timeline.png
โ”‚   โ”œโ”€โ”€ wordcloud_global.png
โ”‚   โ”œโ”€โ”€ user_activity_distribution.png
โ”‚   โ””โ”€โ”€ reply_latency_distribution.png
โ”œโ”€โ”€ reports/                    # ๋ฆฌํฌํŠธ
โ”‚   โ”œโ”€โ”€ analysis_report.md      # ์ข…ํ•ฉ ๋ถ„์„ ๋ฆฌํฌํŠธ
โ”‚   โ””โ”€โ”€ qa_test_report.md       # ํ’ˆ์งˆ ๋ณด์ฆ ๋ฆฌํฌํŠธ (ํ…Œ์ŠคํŠธ์‹œ)
โ””โ”€โ”€ logs/                       # ๋กœ๊ทธ
    โ”œโ”€โ”€ pipeline_metadata.json  # ์‹คํ–‰ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ
    โ””โ”€โ”€ analyzer.log            # ๋ถ„์„ ๋กœ๊ทธ
```

## ๐Ÿ“‹ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํ˜•์‹

์นด์นด์˜คํ†ก์—์„œ ๋‚ด๋ณด๋‚ธ CSV ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€์›ํ•˜๋Š” ์ปฌ๋Ÿผ ํ˜•์‹:

### ํ•„์ˆ˜ ์ปฌ๋Ÿผ
- `user` ๋˜๋Š” `User` ๋˜๋Š” `์‚ฌ์šฉ์ž`: ๋ฉ”์‹œ์ง€ ์ž‘์„ฑ์ž
- `message` ๋˜๋Š” `Message` ๋˜๋Š” `๋ฉ”์‹œ์ง€`: ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ  
- `datetime` ๋˜๋Š” `Date` ๋˜๋Š” `์‹œ๊ฐ„`: ๋ฉ”์‹œ์ง€ ์‹œ๊ฐ„

### ์˜ˆ์ œ CSV ํ˜•์‹
```csv
user,message,datetime
๊น€๋ฏผ์ˆ˜,์•ˆ๋…•ํ•˜์„ธ์š”!,2024-01-01 10:00:00
์ด์ง€์€,๋„ค ์•ˆ๋…•ํ•˜์„ธ์š”! ใ…Žใ…Ž,2024-01-01 10:01:00
๋ฐ•์„œ์ค€,์˜ค๋Š˜ ๋‚ ์”จ ์ข‹๋„ค์š”,2024-01-01 10:02:00
```

## ๐Ÿงช ํ…Œ์ŠคํŠธ

### ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ
```bash
# ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ (์˜์กด์„ฑ ์—†์ด)
python simple_test.py

# ์ „์ฒด ํ…Œ์ŠคํŠธ ์Šค์œ„ํŠธ (์˜์กด์„ฑ ์„ค์น˜ ํ›„)
python test_runner.py
```

### ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
```bash
# 1000๊ฐœ ๋ฉ”์‹œ์ง€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
python test_runner.py --generate-data
```

## ๐Ÿ”ง ๊ณ ๊ธ‰ ์„ค์ •

### ๐Ÿš€ GPU ๊ฐ€์† ์ง€์› (NEW!)
- **์ž๋™ GPU ์ธ์‹**: CUDA๊ฐ€ ์„ค์น˜๋œ ์‹œ์Šคํ…œ์—์„œ ์ž๋™์œผ๋กœ GPU ์‚ฌ์šฉ
- **๋ฉ”๋ชจ๋ฆฌ ์ตœ์ ํ™”**: GPU ๋ฉ”๋ชจ๋ฆฌ์˜ 75%๊นŒ์ง€ ์ž๋™ ์ œํ•œํ•˜์—ฌ ์•ˆ์ •์„ฑ ๋ณด์žฅ
- **๋ชจ๋ธ ์ž๋™ ์ด๊ด€**: ์ž„๋ฒ ๋”ฉ ๋ฐ SPLADE ๋ชจ๋ธ์„ GPU๋กœ ์ž๋™ ๋กœ๋“œ
- **๋ฐฐ์น˜ ํฌ๊ธฐ ์ตœ์ ํ™”**: GPU ๋ฉ”๋ชจ๋ฆฌ์— ๋”ฐ๋ผ ๋ฐฐ์น˜ ํฌ๊ธฐ ์ž๋™ ์กฐ์ •

#### GPU ๋ฉ”๋ชจ๋ฆฌ๋ณ„ ์ตœ์ ํ™”
- **12GB+ (RTX 3080Ti/4080 ์ด์ƒ)**: ๋ฐฐ์น˜ ํฌ๊ธฐ 128, Half precision
- **8-12GB (RTX 3070/4070)**: ๋ฐฐ์น˜ ํฌ๊ธฐ 64, Half precision  
- **4-8GB (GTX 1660/RTX 3060)**: ๋ฐฐ์น˜ ํฌ๊ธฐ 48, Mixed precision
- **4GB ๋ฏธ๋งŒ**: CPU ๋ชจ๋“œ๋กœ ์ž๋™ ์ „ํ™˜

### ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ
- **๊ธฐ๋ณธ๊ฐ’**: Mock ์ž„๋ฒ ๋”ฉ (์™ธ๋ถ€ ์˜์กด์„ฑ ์—†์Œ)
- **๊ณ ๊ธ‰ ์˜ต์…˜**: SentenceTransformer ๋ชจ๋ธ (`sentence-transformers` ์„ค์น˜ ํ•„์š”)
- **GPU ๊ฐ€์†**: CUDA ์ง€์› ์‹œ ์ž๋™์œผ๋กœ GPU์—์„œ ์‹คํ–‰

### SPLADE ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ƒ‰
- **ํ™œ์„ฑํ™”**: `--use-splade` ์˜ต์…˜ ์‚ฌ์šฉ
- **๊ธฐ๋Šฅ**: Dense + Sparse ๋ฒกํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ณ ๊ธ‰ ๊ฒ€์ƒ‰
- **์šฉ๋„**: ํŠน์ • ์ฃผ์ œ๋‚˜ ํ‚ค์›Œ๋“œ๋กœ ๋Œ€ํ™” ๊ฒ€์ƒ‰
- **GPU ๊ฐ€์†**: Half precision์œผ๋กœ GPU์—์„œ ๊ณ ์† ์ฒ˜๋ฆฌ

### Ollama ์—ฐ๋™ (ํ•œ๊ตญ์–ด ๋ชจ๋ธ ์™„์ „ ์ง€์›)
- **ํ™œ์„ฑํ™”**: `--use-ollama` ์˜ต์…˜ ์‚ฌ์šฉ
- **์š”๊ตฌ์‚ฌํ•ญ**: Ollama ์„œ๋ฒ„ ์‹คํ–‰ ์ค‘์ด์–ด์•ผ ํ•จ
- **๊ธฐ๋ณธ ๋ชจ๋ธ**: gpt-oss:20b (์ถ”์ฒœ)

#### ๐Ÿ‡ฐ๐Ÿ‡ท ์ง€์› ํ•œ๊ตญ์–ด ๋ชจ๋ธ๋“ค
| ๋ชจ๋ธ๋ช… | ํฌ๊ธฐ | ํŠน์ง• | ์‚ฌ์šฉ๋ฒ• |
|--------|------|------|--------|
| `gpt-oss:20b` | 20B | ๋ฒ”์šฉ ํ•œ๊ตญ์–ด ๋ชจ๋ธ (๊ธฐ๋ณธ๊ฐ’) | `--model-name "gpt-oss:20b"` |
| `gpt-oss:40b` | 40B | ๊ณ ์„ฑ๋Šฅ ํ•œ๊ตญ์–ด ๋ชจ๋ธ | `--model-name "gpt-oss:40b"` |
| `llama3-ko` | 8B | LLaMA3 ํ•œ๊ตญ์–ด ํŒŒ์ธํŠœ๋‹ | `--model-name "llama3-ko"` |
| `aya:8b` | 8B | ๋‹ค๊ตญ์–ด ์ง€์› (ํ•œ๊ตญ์–ด ํฌํ•จ) | `--model-name "aya:8b"` |
| `gemma2-ko` | 9B | Google Gemma2 ํ•œ๊ตญ์–ด ๋ฒ„์ „ | `--model-name "gemma2-ko"` |
| `solar-ko` | 10.7B | Upstage SOLAR ํ•œ๊ตญ์–ด ๋ชจ๋ธ | `--model-name "solar-ko"` |
| `eeve-korean` | 10.8B | ํ•œ๊ตญ ์ „์šฉ ๋Œ€ํ™” ๋ชจ๋ธ | `--model-name "eeve-korean"` |
| `beomi-ko` | 13B | ํ•œ๊ตญ์–ด ํŠนํ™” ๊ณ ์„ฑ๋Šฅ ๋ชจ๋ธ | `--model-name "beomi-ko"` |

#### ๐Ÿš€ ๋ชจ๋ธ ์„ค์น˜ ๋ฐ ์‚ฌ์šฉ๋ฒ•
```bash
# Ollama ์„ค์น˜ (ํ•œ ๋ฒˆ๋งŒ)
curl -fsSL https://ollama.ai/install.sh | sh

# ํ•œ๊ตญ์–ด ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ (์˜ˆ: gpt-oss:20b)
ollama pull gpt-oss:20b

# ๋ถ„์„ ์‹คํ–‰
kakao-analyzer --input chat.csv --use-ollama --model-name "gpt-oss:20b"
```

## ๐Ÿ“Š ๋ถ„์„ ๊ฒฐ๊ณผ ํ•ด์„

### ์ฐธ์—ฌ ๋ถˆํ‰๋“ฑ (์ง€๋‹ˆ ๊ณ„์ˆ˜)
- **0.0-0.3**: ๋งค์šฐ ๊ท ๋“ฑํ•œ ์ฐธ์—ฌ
- **0.3-0.5**: ์•ฝ๊ฐ„ ๋ถˆ๊ท ๋“ฑ
- **0.5-0.7**: ๋ถˆ๊ท ๋“ฑํ•œ ์ฐธ์—ฌ
- **0.7-1.0**: ๋งค์šฐ ๋ถˆ๊ท ๋“ฑ (์†Œ์ˆ˜๊ฐ€ ๋Œ€ํ™” ์ฃผ๋„)

### ๋ฉ˜์…˜ ๋ถ„์„ ์ง€ํ‘œ
- **์ƒํ˜ธ ๋ฉ˜์…˜ ๊ด€๊ณ„**: ์„œ๋กœ ๋ฉ˜์…˜ํ•˜๋Š” ์‚ฌ์šฉ์ž ์Œ์˜ ์ˆ˜์™€ ๋นˆ๋„
- **๋ฉ˜์…˜ ๋„คํŠธ์›Œํฌ ๋ฐ€๋„**: ์ „์ฒด ๊ฐ€๋Šฅํ•œ ๋ฉ˜์…˜ ๊ด€๊ณ„ ๋Œ€๋น„ ์‹ค์ œ ๋ฉ˜์…˜ ๊ด€๊ณ„ ๋น„์œจ
- **๋ฉ˜์…˜ ๋ชฉ์  ๋ถ„๋ฅ˜**: ์งˆ๋ฌธ, ๋ถ€ํƒ/์š”์ฒญ, ์ธ์‚ฌ, ๊ธด๊ธ‰, ํ† ๋ก /์˜๊ฒฌ ๋“ฑ์œผ๋กœ ์ž๋™ ๋ถ„๋ฅ˜

### ๋‹ต์žฅ ์†๋„ ์นดํ…Œ๊ณ ๋ฆฌ
- **์ฆ‰์„ ๋‹ต์žฅ**: 1๋ถ„ ์ด๋‚ด
- **๋น ๋ฅธ ๋‹ต์žฅ**: 1-5๋ถ„
- **๋ณดํ†ต ๋‹ต์žฅ**: 5-30๋ถ„
- **๋А๋ฆฐ ๋‹ต์žฅ**: 30๋ถ„ ์ด์ƒ

### ์ฃผ์ œ ์„ธ๊ทธ๋จผํŠธ
- ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™ ๊ฐ์ง€
- ๊ฐ ์„ธ๊ทธ๋จผํŠธ๋ณ„ ํ‚ค์›Œ๋“œ, ์ฐธ์—ฌ์ž, ์ง€์†์‹œ๊ฐ„ ์ œ๊ณต
- ์ฃผ์ œ ์ „ํ™˜ ํŒจํ„ด ๋ถ„์„

## ๐ŸŽจ ์‹œ๊ฐํ™” ๊ฐ€์ด๋“œ

๋ชจ๋“  ๊ทธ๋ž˜ํ”„๋Š” ํ•œ๊ตญ์–ด ํฐํŠธ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค:
- **ํ˜•์‹**: PNG (๊ธฐ๋ณธ๊ฐ’)
- **ํ•ด์ƒ๋„**: 300 DPI (๊ธฐ๋ณธ๊ฐ’)
- **ํฌ๊ธฐ**: ์ž๋™ ์กฐ์ •

### ์ฃผ์š” ์‹œ๊ฐํ™”
1. **ํ™œ๋™ ํžˆํŠธ๋งต**: ์–ธ์ œ ๊ฐ€์žฅ ํ™œ๋ฐœํ•œ์ง€ ํ•œ๋ˆˆ์— ํŒŒ์•…
2. **์ผ๋ณ„ ํƒ€์ž„๋ผ์ธ**: ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋Œ€ํ™”๋Ÿ‰ ๋ณ€ํ™”
3. **์ฃผ์ œ ํƒ€์ž„๋ผ์ธ**: ๋Œ€ํ™” ์ฃผ์ œ์˜ ์‹œ๊ฐ„์  ํ๋ฆ„
4. **์›Œ๋“œํด๋ผ์šฐ๋“œ**: ์ž์ฃผ ์‚ฌ์šฉ๋œ ๋‹จ์–ด๋“ค
5. **์‚ฌ์šฉ์ž ํ™œ๋™**: ๊ฐ ์ฐธ์—ฌ์ž์˜ ๊ธฐ์—ฌ๋„
6. **๋‹ต์žฅ ์†๋„**: ์†Œํ†ต ์Šคํƒ€์ผ ๋ถ„์„

## ๐Ÿ’ก ํ™œ์šฉ ์‚ฌ๋ก€

### ๊ฐœ์ธ/๊ทธ๋ฃน ๋ถ„์„
- ์นœ๊ตฌ๋“ค๊ณผ์˜ ๋Œ€ํ™” ํŒจํ„ด ๋ถ„์„
- ๊ฐ€์กฑ ๋‹จํ†ก๋ฐฉ ํ™œ๋™ ๋ถ„์„
- ๋™ํ˜ธํšŒ/์ปค๋ฎค๋‹ˆํ‹ฐ ์†Œํ†ต ํŒจํ„ด

### ์—ฐ๊ตฌ ๋ชฉ์ 
- ๋””์ง€ํ„ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์—ฐ๊ตฌ
- ์‚ฌํšŒ ๋„คํŠธ์›Œํฌ ๋ถ„์„
- ์–ธ์–ดํ•™ ์—ฐ๊ตฌ ๋ฐ์ดํ„ฐ

### ๋น„์ฆˆ๋‹ˆ์Šค ๋ถ„์„
- ํŒ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํšจ์œจ์„ฑ
- ๊ณ ๊ฐ ์†Œํ†ต ํŒจํ„ด
- ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ด€๋ฆฌ ์ธ์‚ฌ์ดํŠธ

## ๐Ÿ›ก๏ธ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ

- ๋ชจ๋“  ๋ถ„์„์€ ๋กœ์ปฌ์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค
- ๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€๋กœ ์ „์†ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
- ๊ฒฐ๊ณผ ํŒŒ์ผ์—๋Š” ์›๋ณธ ๋ฉ”์‹œ์ง€๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ณต์œ  ์‹œ ์ฃผ์˜ํ•˜์„ธ์š”
- ๊ฐœ์ธ ์‹๋ณ„ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์‹ ์ค‘ํžˆ ๊ด€๋ฆฌํ•˜์„ธ์š”

## ๐Ÿ› ๋ฌธ์ œ ํ•ด๊ฒฐ

### ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ

**1. ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ**
```bash
pip install -r requirements.txt
```

**2. ํ•œ๊ตญ์–ด ํฐํŠธ ๋ฌธ์ œ**
- macOS: Apple Gothic ์ž๋™ ์‚ฌ์šฉ
- Windows: Malgun Gothic ์ž๋™ ์‚ฌ์šฉ
- Linux: Noto Sans CJK KR ์„ค์น˜ ๊ถŒ์žฅ

**3. ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ**
- ํฐ ๋ฐ์ดํ„ฐ์…‹์˜ ๊ฒฝ์šฐ `--topic-window-size` ๊ฐ’์„ ์ค„์—ฌ๋ณด์„ธ์š”
- ์ž„๋ฒ ๋”ฉ ๋น„ํ™œ์„ฑํ™”: ์„ค์ •์—์„œ `use_embeddings = False`

**4. CSV ์ธ์ฝ”๋”ฉ ๋ฌธ์ œ**
- ์ž๋™ ์ธ์ฝ”๋”ฉ ๊ฐ์ง€ ๊ธฐ๋Šฅ ๋‚ด์žฅ
- ์ˆ˜๋™ ์ง€์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํŒŒ์ผ์„ UTF-8๋กœ ๋ณ€ํ™˜

### ๋กœ๊ทธ ํ™•์ธ
```bash
# ์ƒ์„ธ ๋กœ๊ทธ๋กœ ์‹คํ–‰
kakao-analyzer --input chat.csv --log-level DEBUG

# ๋กœ๊ทธ ํŒŒ์ผ ํ™•์ธ (๊ธฐ๋ณธ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ)
cat chat_analysis/logs/run.log
```

## ๐Ÿ“ˆ ์„ฑ๋Šฅ ์ตœ์ ํ™”

### ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
- **๋ฐฐ์น˜ ํฌ๊ธฐ ์กฐ์ •**: ์„ค์ •์—์„œ `batch_size` ๋ณ€๊ฒฝ
- **์ž„๋ฒ ๋”ฉ ๋น„ํ™œ์„ฑํ™”**: ๊ธฐ๋ณธ ๋ถ„์„๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
- **์œˆ๋„์šฐ ํฌ๊ธฐ ๊ฐ์†Œ**: ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ ˆ์•ฝ

### ์†๋„ ํ–ฅ์ƒ
- **๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ**: ๊ฐ€๋Šฅํ•œ ๊ณณ์—์„œ ์ž๋™ ์ ์šฉ
- **์บ์‹ฑ**: ์ค‘๊ฐ„ ๊ฒฐ๊ณผ ์ž๋™ ์ €์žฅ
- **์ตœ์ ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜**: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋Œ€์‘

## ๐Ÿšง ๋กœ๋“œ๋งต

ํ˜„์žฌ ์ด ํ”„๋กœ์ ํŠธ๋Š” ์ง€์†์ ์œผ๋กœ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์ด ์ถ”๊ฐ€๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค:

### ๐Ÿ”ฎ ์˜ˆ์ •๋œ ๊ธฐ๋Šฅ๋“ค
- **๐ŸŒ ๋‹ค์ค‘ ๋ฉ”์‹ ์ € ์ง€์›**: ๋ผ์ธ, ํ…”๋ ˆ๊ทธ๋žจ, ๋””์Šค์ฝ”๋“œ ๋“ฑ ๋‹ค๋ฅธ ๋ฉ”์‹ ์ € ํ”Œ๋žซํผ ์ง€์›
- **๐Ÿ“ฑ ์›น ์ธํ„ฐํŽ˜์ด์Šค**: ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ง๊ด€์ ์ธ UI
- **โšก ์‹ค์‹œ๊ฐ„ ๋ถ„์„**: ๋Œ€ํ™” ์ง„ํ–‰ ์ค‘ ์‹ค์‹œ๊ฐ„ ํŒจํ„ด ๋ถ„์„
- **๐Ÿค– ๊ณ ๊ธ‰ AI ๊ธฐ๋Šฅ**: GPT-4 ํ†ตํ•ฉ, ๋” ์ •๊ตํ•œ ๊ฐ์ • ๋ถ„์„
- **๐Ÿ“Š ๋Œ€์‹œ๋ณด๋“œ**: ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์•Œ๋ฆผ ์‹œ์Šคํ…œ
- **๐Ÿ” ๊ฒ€์ƒ‰ ์—”์ง„**: ๋Œ€ํ™” ๋‚ด์šฉ ๊ณ ๊ธ‰ ๊ฒ€์ƒ‰ ๋ฐ ํ•„ํ„ฐ๋ง
- **๐Ÿ“ˆ ํŠธ๋ Œ๋“œ ๋ถ„์„**: ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๋Œ€ํ™” ํŒจํ„ด ๋ณ€ํ™” ์ถ”์ 
- **๐ŸŽจ ํ…Œ๋งˆ ์ปค์Šคํ„ฐ๋งˆ์ด์ œ์ด์…˜**: ์‹œ๊ฐํ™” ์Šคํƒ€์ผ ๋ฐ ์ƒ‰์ƒ ํ…Œ๋งˆ ์„ ํƒ
- **๐Ÿ’พ ํด๋ผ์šฐ๋“œ ๋ฐฑ์—…**: ๋ถ„์„ ๊ฒฐ๊ณผ ์ž๋™ ๋ฐฑ์—… ๋ฐ ๋™๊ธฐํ™”
- **๐Ÿ“ง ๋ฆฌํฌํŠธ ์ž๋™ ๋ฐœ์†ก**: ์ •๊ธฐ์ ์ธ ๋ถ„์„ ๋ฆฌํฌํŠธ ์ด๋ฉ”์ผ ๋ฐœ์†ก

### ๐ŸŽฏ ๋‹ค์Œ ๋ฒ„์ „ (v1.1.0) ์˜ˆ์ • ๊ธฐ๋Šฅ
- ์Œ์„ฑ ๋ฉ”์‹œ์ง€ ๊ธธ์ด ๋ถ„์„
- ํŒŒ์ผ ๊ณต์œ  ํŒจํ„ด ๋ถ„์„
- ๋Œ€ํ™”๋ฐฉ ์ฐธ์—ฌ์ž ๋ณ€ํ™” ์ถ”์ 
- ๊ฐ์ • ๋ณ€ํ™” ์‹œ๊ณ„์—ด ๋ถ„์„
- ํ‚ค์›Œ๋“œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ

## ๐Ÿ‘จโ€๐Ÿ’ป ๊ฐœ๋ฐœ์ž

### ๐ŸŽ“ ์ฃผ ๊ฐœ๋ฐœ์ž

- **xistoh162108** (KAIST)
  - ๐Ÿ“ง ์ด๋ฉ”์ผ: xistoh162108@kaist.ac.kr
  - ๐Ÿซ ์†Œ์†: ํ•œ๊ตญ๊ณผํ•™๊ธฐ์ˆ ์› (KAIST)
  - ๐Ÿ”— GitHub: [@xistoh162108](https://github.com/xistoh162108)

### ๐Ÿค– AI ํ˜‘๋ ฅ ๊ฐœ๋ฐœ

- **Claude AI** (Anthropic)
  - ์ฝ”๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ตฌํ˜„
  - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™” ๋ฐ ํ•œ๊ตญ์–ด ํŠนํ™” ๊ธฐ๋Šฅ
  - ๋ฌธ์„œํ™” ๋ฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ 

์ด ํ”„๋กœ์ ํŠธ๋Š” **์ธ๊ฐ„-AI ํ˜‘์—…**์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ, ํ•™์ˆ  ์—ฐ๊ตฌ์™€ ์‹ค์šฉ์  ๋„๊ตฌ ๊ฐœ๋ฐœ์˜ ๋งŒ๋‚จ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

## ๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

### ๐Ÿ”— ํ˜‘์—… ๋ฐฉ์‹

- **์ด์Šˆ ๋ฆฌํฌํŒ…**: [GitHub Issues](https://github.com/xistoh162108/kakaotalk_analyzer/issues)
- **๊ธฐ๋Šฅ ์ œ์•ˆ**: Pull Request ํ™˜์˜
- **ํ•™์ˆ  ํ˜‘๋ ฅ**: ์—ฐ๊ตฌ ๋ชฉ์  ์‚ฌ์šฉ ์‹œ ์ธ์šฉ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค

### ๐Ÿ’ก ๊ฐœ์„  ์•„์ด๋””์–ด

- ์ƒˆ๋กœ์šด ๋ถ„์„ ์ง€ํ‘œ ์ถ”๊ฐ€
- ๋‹ค๋ฅธ ๋ฉ”์‹ ์ € ์ง€์› (๋ผ์ธ, ํ…”๋ ˆ๊ทธ๋žจ ๋“ฑ)
- ์›น ์ธํ„ฐํŽ˜์ด์Šค ๊ฐœ๋ฐœ
- ์‹ค์‹œ๊ฐ„ ๋ถ„์„ ๊ธฐ๋Šฅ

### ๐Ÿ“ ์ธ์šฉ (Citation)

ํ•™์ˆ  ๋…ผ๋ฌธ์ด๋‚˜ ์—ฐ๊ตฌ์—์„œ ์‚ฌ์šฉํ•˜์‹ค ๋•Œ:

```bibtex
xistoh162108, & Claude AI. (2025). Kakao Talk Analyzer: 
Comprehensive analysis tool for KakaoTalk chat exports (v1.0.1). 
https://github.com/xistoh162108/kakaotalk_analyzer
```

## ๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค ํ•˜์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE) ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

## ๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

- **ํ•œ๊ตญ์–ด ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ**: KoNLPy, mecab-python3
- **์‹œ๊ฐํ™”**: matplotlib, seaborn, wordcloud
- **๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ**: pandas, numpy
- **๋จธ์‹ ๋Ÿฌ๋‹**: scikit-learn, sentence-transformers

---

**๐Ÿค– Generated with [Claude Code](https://claude.ai/code)**

Co-Authored-By: Claude <noreply@anthropic.com>

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/xistoh162108/kakaotalk_analyzer",
    "name": "kakao-analyzer",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "kakao kakaotalk chat analysis nlp korean messaging",
    "author": "xistoh162108, Claude AI",
    "author_email": "xistoh162108@kaist.ac.kr",
    "download_url": "https://files.pythonhosted.org/packages/84/6d/863a8d2c93da2cb710da2d1432b4e0bd13937e6c97bccda867f49192f532/kakao_analyzer-1.0.2.tar.gz",
    "platform": null,
    "description": "# \ud83d\udd25 \uce74\uce74\uc624\ud1a1 \ub300\ud654 \ubd84\uc11d\uae30 (Kakao Talk Analyzer)\n\n[![PyPI version](https://badge.fury.io/py/kakao-analyzer.svg)](https://badge.fury.io/py/kakao-analyzer)\n[![Python versions](https://img.shields.io/pypi/pyversions/kakao-analyzer.svg)](https://pypi.org/project/kakao-analyzer/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Downloads](https://pepy.tech/badge/kakao-analyzer)](https://pepy.tech/project/kakao-analyzer)\n\n> \uce74\uce74\uc624\ud1a1 \ub300\ud654 \ub0b4\ubcf4\ub0b4\uae30 CSV \ud30c\uc77c\uc744 \uc885\ud569\uc801\uc73c\ub85c \ubd84\uc11d\ud558\ub294 **\ucc28\uc138\ub300 AI \uae30\ubc18** \uc62c\uc778\uc6d0 \ub3c4\uad6c\n\n```bash\npip install kakao-analyzer\n```\n\n**\ud83c\udfaf \uce74\uce74\uc624\ud1a1\uc758 \ud2b9\uc131\uc744 \uc644\ubcbd\ud558\uac8c \uc774\ud574\ud558\ub294 \uc2a4\ub9c8\ud2b8 \ubd84\uc11d\uae30**\n- \uc5f0\uc18d \uba54\uc2dc\uc9c0 \uc790\ub3d9 \uadf8\ub8f9\ud551 (1\ubd84 \uc774\ub0b4 \uba54\uc2dc\uc9c0 \ud1b5\ud569)\n- \ud55c\uad6d\uc5b4 \ucc44\ud305 \ud328\ud134 \uc778\uc2dd (\u314b\u314b, \u3160\u3160, \uc774\ubaa8\ud2f0\ucf58 \ub4f1)\n- \uc2dc\uc2a4\ud15c \uba54\uc2dc\uc9c0 \uc790\ub3d9 \ud544\ud130\ub9c1 (\uc0ad\uc81c\ub41c \uba54\uc2dc\uc9c0, \ud22c\ud45c, \uc815\uc0b0 \ub4f1)\n- \uc2e4\uc81c \ub300\ud654\ub9cc \ubd84\uc11d\ud558\uc5ec \ub354 \uc815\ud655\ud55c \uc778\uc0ac\uc774\ud2b8 \uc81c\uacf5\n\n## \ud83d\ude80 \uc8fc\uc694 \uae30\ub2a5\n\n### \ud83c\udfaf **\uce74\uce74\uc624\ud1a1 \ud2b9\ud654 \uae30\ub2a5** \u2b50 NEW!\n- **\uc2a4\ub9c8\ud2b8 \uba54\uc2dc\uc9c0 \uadf8\ub8f9\ud551**: 1\ubd84 \uc774\ub0b4 \uc5f0\uc18d \uba54\uc2dc\uc9c0\ub97c \ud558\ub098\ub85c \ud1b5\ud569\ud558\uc5ec \uc2e4\uc81c \uc758\ub3c4 \ud30c\uc545\n- **\ud55c\uad6d\uc5b4 \ucc44\ud305 \ud328\ud134 \ubd84\uc11d**: \u314b\u314b, \u314e\u314e, \u3160\u3160, \u3147\u314b \ub4f1 \ud55c\uad6d\uc778\uc758 \ucc44\ud305 \uc2b5\uad00 \uc778\uc2dd\n- **\uc2dc\uc2a4\ud15c \uba54\uc2dc\uc9c0 \ud544\ud130\ub9c1**: \uc0ad\uc81c\ub41c \uba54\uc2dc\uc9c0, \ud22c\ud45c, \uc815\uc0b0, \uc785\uc7a5/\ud1f4\uc7a5 \uc54c\ub9bc \uc790\ub3d9 \uc81c\uac70\n- **\uba58\uc158 \ubd84\uc11d**: @ \uae30\ub2a5\uc744 \uc774\uc6a9\ud55c \uc0ac\uc6a9\uc790 \uc5b8\uae09 \ud328\ud134\uacfc \ub124\ud2b8\uc6cc\ud06c \ubd84\uc11d\n- **\uac10\uc815 \ud45c\ud604 \ubd84\uc11d**: \uc6c3\uc74c, \uc2ac\ud514, \ub3d9\uc758 \ud45c\ud604 \ub4f1\uc758 \uac10\uc815 \ud328\ud134 \ucd94\uc801\n\n### \ud83d\udcca \uae30\ubcf8 \ud1b5\uacc4 \ubd84\uc11d\n- **\uc0ac\uc6a9\uc790\ubcc4 \ud65c\ub3d9 \ud1b5\uacc4**: \uba54\uc2dc\uc9c0 \uc218, \ucc38\uc5ec\uc728, \uc77c\ud3c9\uade0 \ud65c\ub3d9\ub7c9\n- **\uc2dc\uac04\uc801 \ud328\ud134 \ubd84\uc11d**: \uc2dc\uac04\ub300\ubcc4, \uc694\uc77c\ubcc4, \uc6d4\ubcc4 \ud65c\ub3d9 \ubd84\ud3ec  \n- **\ub2e8\uc5b4 \ube48\ub3c4 \ubd84\uc11d**: \ud55c\uad6d\uc5b4 \ud615\ud0dc\uc18c \ubd84\uc11d \ubc0f \ud0a4\uc6cc\ub4dc \ucd94\ucd9c\n- **\uba54\uc2dc\uc9c0\ubcc4 \ub2e8\uc5b4 \uc218 \ud1b5\uacc4**: \uc6d0\ubcf8 \ubc0f \ud544\ud130\ub9c1\ub41c \ub2e8\uc5b4 \uc218 \ubd84\uc11d (\ud3c9\uade0, \uc911\uac04\uac12, \ucd5c\ub300\uac12)\n- **\uc774\ubaa8\ud2f0\ucf58/\uc774\ubaa8\uc9c0 \uc0ac\uc6a9 \ud1b5\uacc4**: \ubc18\uc751 \ud328\ud134 \ubd84\uc11d\n\n### \ud83d\udcac \ub300\ud654 \uc5ed\ud559 \ubd84\uc11d\n- **\ub300\ud654 \ud134 \ubd84\uc11d**: \uc790\ub3d9 \ub300\ud654 \uc138\uc158 \uad6c\ubd84\n- **\uc8fc\uc81c \uc804\ud658 \ud0d0\uc9c0**: \uc784\ubca0\ub529 \uae30\ubc18 \uc8fc\uc81c \ubcc0\ud654 \uac10\uc9c0\n- **\ucc38\uc5ec\uc790 \ud328\ud134**: \ub300\ud654 \uc2dc\uc791\uc790, \uc751\ub2f5\uc790 \ubd84\uc11d (\uc2dc\uc791 \ud69f\uc218 \uc21c\uc73c\ub85c \uc815\ub82c)\n- **\uc0c1\ud638\uc791\uc6a9 \ubd84\uc11d**: \uc0ac\uc6a9\uc790 \uac04 \uc18c\ud1b5 \ud328\ud134\n- **\uba58\uc158 \ub124\ud2b8\uc6cc\ud06c \ubd84\uc11d**: @ \uba58\uc158\uc744 \ud1b5\ud55c \uc0ac\uc6a9\uc790 \uac04 \uc5b8\uae09 \uad00\uacc4 \ubc0f \uc0c1\ud638 \uba58\uc158 \ubd84\uc11d\n\n### \ud83c\udfaf \uc7ac\ubbf8\uc788\ub294 \uc9c0\ud45c\n- **\ucc38\uc5ec \ubd88\ud3c9\ub4f1**: \uc9c0\ub2c8 \uacc4\uc218\ub97c \ud1b5\ud55c \ubc1c\uc5b8\uad8c \ubd84\uc11d\n- **\ub2f5\uc7a5 \uc18d\ub3c4**: \ubc18\uc751 \uc2dc\uac04 \ud1b5\uacc4 \ubc0f \ubd84\ud3ec\n- **\ud65c\ub3d9 \uc5f0\uc18d\uc131**: \uc5f0\uc18d \uba54\uc2dc\uc9c0 \ubc0f \ud65c\ub3d9\uc77c \ubd84\uc11d\n- **\uc2ec\uc57c \ucc44\ud305**: \ubc24\uc0d8 \ub300\ud654 \ud328\ud134 \ubd84\uc11d\n\n### \ud83d\udd0d \uace0\uae09 \ubd84\uc11d\n- **\uc784\ubca0\ub529 \uae30\ubc18 \uc8fc\uc81c \ubd84\uc11d**: \uc758\ubbf8\ub860\uc801 \uc720\uc0ac\ub3c4\ub97c \ud1b5\ud55c \uc8fc\uc81c \uc138\uadf8\uba3c\ud2b8\n- **SPLADE \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9**: Dense + Sparse \ubca1\ud130\ub97c \ud65c\uc6a9\ud55c \ub300\ud654 \uac80\uc0c9\n- **\uc2dc\uacc4\uc5f4 \ubd84\uc11d**: \uc2dc\uac04\uc5d0 \ub530\ub978 \ub300\ud654 \ud328\ud134 \ubcc0\ud654\n- **\uac10\uc815 \ubd84\uc11d**: \ub300\ud654 \ubd84\uc704\uae30\uc640 \uac10\uc815 \ud328\ud134 \ucd94\uc801\n- **\uc2a4\ub9c8\ud2b8 \ud1a0\ud53d \ud074\ub7ec\uc2a4\ud130\ub9c1**: \uace0\uae09 \uc8fc\uc81c \ubd84\ub958 \ubc0f \ud14c\ub9c8 \ubd84\uc11d\n- **\ub300\ud654 \ub9ac\ub4ec \ubd84\uc11d**: \uc751\ub2f5 \ud328\ud134\uacfc \uc2dc\uac04\uc801 \ub9ac\ub4ec \ubd84\uc11d\n- **\ub300\uaddc\ubaa8 \ub370\uc774\ud130\uc14b \ucd5c\uc801\ud654**: \uc9c0\ub2a5\ud615 \uccad\ud0b9\uacfc \uba54\ubaa8\ub9ac \ud6a8\uc728\uc131\n\n### \ud83d\udcc8 \uc2dc\uac01\ud654 (\uac1c\uc120\ub428!)\n- **\ud65c\ub3d9 \ud788\ud2b8\ub9f5**: \uc2dc\uac04\ub300 \u00d7 \uc694\uc77c \ud65c\ub3d9 \ubd84\ud3ec\n- **\uc77c\ubcc4 \ud0c0\uc784\ub77c\uc778**: \uba54\uc2dc\uc9c0 \uc218 \ucd94\uc774 \uadf8\ub798\ud504\n- **\uc8fc\uc81c \ud0c0\uc784\ub77c\uc778**: \uc8fc\uc81c \uc138\uadf8\uba3c\ud2b8 \uc2dc\uac01\ud654 (\uacb9\uce68 \ubb38\uc81c \ud574\uacb0)\n- **\uc6cc\ub4dc\ud074\ub77c\uc6b0\ub4dc**: \ud55c\uad6d\uc5b4 \ud3f0\ud2b8 \uc9c0\uc6d0\uc73c\ub85c \uae68\uc9d0 \ud604\uc0c1 \ud574\uacb0\n- **\uc0ac\uc6a9\uc790 \ud65c\ub3d9 \ucc28\ud2b8**: \ub9ce\uc740 \uc0ac\uc6a9\uc790\ub3c4 \uae54\ub054\ud558\uac8c \ud45c\uc2dc (\uacb9\uce68 \ubb38\uc81c \ud574\uacb0)\n\n## \ud83d\udee0\ufe0f \uc124\uce58 \ubc0f \uc2e4\ud589\n\n### \ud83d\udce6 PyPI\ub97c \ud1b5\ud55c \uac04\ud3b8 \uc124\uce58 (\uad8c\uc7a5)\n\n```bash\n# \uae30\ubcf8 \uc124\uce58\npip install kakao-analyzer\n\n# \uc804\uccb4 \uae30\ub2a5 \uc124\uce58 (AI \ubaa8\ub378 \ud3ec\ud568)\npip install kakao-analyzer[full]\n\n# \uac1c\ubc1c \ub3c4\uad6c \ud3ec\ud568 \uc124\uce58\npip install kakao-analyzer[dev]\n```\n\n\uc124\uce58 \ud6c4 \ubc14\ub85c \uc0ac\uc6a9 \uac00\ub2a5:\n```bash\nkakao-analyzer --input your_chat.csv\n```\n\n### \ud83d\udcbb \uac1c\ubc1c\uc790\uc6a9 \uc124\uce58\n\n\uac1c\ubc1c\uc774\ub098 \ucee4\uc2a4\ud130\ub9c8\uc774\uc9d5\uc744 \uc6d0\ud55c\ub2e4\uba74:\n\n```bash\n# \uc800\uc7a5\uc18c \ud074\ub860\ngit clone https://github.com/xistoh162108/kakaotalk_analyzer.git\ncd kakaotalk_analyzer\n\n# \uc758\uc874\uc131 \uc124\uce58\npip install -r requirements.txt\n\n# \uac1c\ubc1c \ubaa8\ub4dc\ub85c \uc124\uce58\npip install -e .\n```\n\n### \ud83d\udccb \uc694\uad6c\uc0ac\ud56d\n- **Python**: 3.8 \uc774\uc0c1\n- **\uc6b4\uc601\uccb4\uc81c**: Windows, macOS, Linux \ubaa8\ub450 \uc9c0\uc6d0\n- **\uba54\ubaa8\ub9ac**: \ucd5c\uc18c 4GB RAM (\ub300\uc6a9\ub7c9 \ub370\uc774\ud130\ub294 8GB+ \uad8c\uc7a5)\n\n## \ud83d\ude80 \ube60\ub978 \uc2dc\uc791\n\n### 1\ub2e8\uacc4: \uc124\uce58\n```bash\npip install kakao-analyzer\n```\n\n### 2\ub2e8\uacc4: \uce74\uce74\uc624\ud1a1 \ub300\ud654 \ub0b4\ubcf4\ub0b4\uae30\n1. \uce74\uce74\uc624\ud1a1 \uc571\uc5d0\uc11c \ubd84\uc11d\ud558\uace0 \uc2f6\uc740 \ub300\ud654\ubc29 \uc5f4\uae30\n2. `\u2630` \uba54\ub274 \u2192 `\ucc44\ud305\ubc29 \uc124\uc815` \u2192 `\ub300\ud654 \ub0b4\uc6a9 \ub0b4\ubcf4\ub0b4\uae30`\n3. `\ud14d\uc2a4\ud2b8 \ud30c\uc77c(.txt)` \uc120\ud0dd\ud558\uc5ec \ub0b4\ubcf4\ub0b4\uae30\n4. \ub0b4\ubcf4\ub0b8 \ud30c\uc77c\uc744 CSV \ud615\uc2dd\uc73c\ub85c \ubcc0\ud658 (\ub610\ub294 \uc9c1\uc811 CSV\ub85c \uc900\ube44)\n\n### 3\ub2e8\uacc4: \ubd84\uc11d \uc2e4\ud589\n```bash\n# \uae30\ubcf8 \ubd84\uc11d\nkakao-analyzer --input your_chat.csv\n\n# \uace0\uae09 AI \ubd84\uc11d \ud3ec\ud568 (\uad8c\uc7a5)\nkakao-analyzer --input your_chat.csv --use-splade --use-ollama\n```\n\n### \u2728 \uc0ac\uc6a9\ubc95\n```bash\n# \uae30\ubcf8 \ubd84\uc11d (\uac00\uc7a5 \uac04\ub2e8)\nkakao-analyzer --input chat.csv\n\n# \ucd9c\ub825 \ub514\ub809\ud1a0\ub9ac \uc9c0\uc815\nkakao-analyzer --input chat.csv --outdir my_analysis\n\n# \ub3c4\uc6c0\ub9d0 \ubcf4\uae30\nkakao-analyzer --help\n```\n\n### \ud83d\udee0\ufe0f \uace0\uae09 \uc635\uc158\n```bash\nkakao-analyzer --input INPUT [\uc635\uc158\ub4e4]\n\n\ud544\uc218 \uc635\uc158:\n  --input INPUT                \uc785\ub825 CSV \ud30c\uc77c \uacbd\ub85c\n\n\ubd84\uc11d \uc635\uc158:\n  --window-minutes MINUTES     \ub300\ud654 \ud134 \uad6c\ubd84 \uc2dc\uac04 (\uae30\ubcf8\uac12: 30\ubd84)\n  --topic-window-size SIZE     \uc8fc\uc81c \ubd84\uc11d \uc708\ub3c4\uc6b0 \ud06c\uae30 (\uae30\ubcf8\uac12: 15)\n  --similarity-threshold FLOAT \uc720\uc0ac\ub3c4 \uc784\uacc4\uac12 (\uae30\ubcf8\uac12: 0.3)\n  --batch-size SIZE            \uc784\ubca0\ub529 \ubc30\uce58 \ud06c\uae30 (\uae30\ubcf8\uac12: 32)\n  --max-workers WORKERS        \ucd5c\ub300 \ubcd1\ub82c \uc791\uc5c5 \uc218 (\uae30\ubcf8\uac12: 4)\n\nAI \ubaa8\ub378 \uc635\uc158:\n  --use-ollama                 Ollama \uc784\ubca0\ub529 \uc0ac\uc6a9 (\ub85c\uceec)\n  --model-name MODEL           Ollama \ubaa8\ub378\uba85 (\uae30\ubcf8\uac12: gpt-oss:20b)\n  --embed-model MODEL          \uc784\ubca0\ub529 \ubaa8\ub378\uba85 (\uae30\ubcf8\uac12: bge-m3)\n  --use-splade                 SPLADE \ud76c\uc18c \uac80\uc0c9 \ud65c\uc131\ud654\n\n\ub300\uaddc\ubaa8 \ub370\uc774\ud130 \uc635\uc158:\n  --subset-size SIZE           \ud14c\uc2a4\ud2b8\uc6a9 \ubd80\ubd84\uc9d1\ud569 \ud06c\uae30  \n  --subset-strategy STRATEGY   \ubd80\ubd84\uc9d1\ud569 \uc804\ub7b5 (balanced/temporal/diverse/random)\n\n\uce74\uce74\uc624\ud1a1 \ud2b9\ud654 \uc635\uc158:\n  --disable-message-grouping   \uc5f0\uc18d \uba54\uc2dc\uc9c0 \uadf8\ub8f9\ud551 \ube44\ud65c\uc131\ud654 (\ube44\ucd94\ucc9c)\n  --group-window-seconds N     \uba54\uc2dc\uc9c0 \uadf8\ub8f9\ud551 \uc2dc\uac04 \ucc3d (\uae30\ubcf8\uac12: 60\ucd08)\n\n\ucd9c\ub825 \uc635\uc158:\n  --outdir DIRECTORY           \ucd9c\ub825 \ub514\ub809\ud1a0\ub9ac\n  --figure-dpi DPI             \uadf8\ub798\ud504 \ud574\uc0c1\ub3c4 (\uae30\ubcf8\uac12: 300)\n  --log-level LEVEL            \ub85c\uadf8 \ub808\ubca8 (DEBUG/INFO/WARNING/ERROR)\n  --quiet                      \ucf58\uc194 \ucd9c\ub825 \uc5b5\uc81c\n  --skip-viz                   \uc2dc\uac01\ud654 \uc0dd\uc131 \uac74\ub108\ub6f0\uae30\n```\n\n### \ud83d\udca1 \uc0ac\uc6a9 \uc608\uc81c\n```bash\n# \ud83c\udf1f \uae30\ubcf8 \ubd84\uc11d (\ucd94\ucc9c)\nkakao-analyzer --input chat.csv\n\n# \ud83e\udd16 AI \uae30\ub2a5 \uc804\uccb4 \ud65c\uc6a9\nkakao-analyzer --input chat.csv --use-splade --use-ollama --model-name \"gpt-oss:20b\"\n\n# \ud83d\udcca \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\uc5d0 \uacb0\uacfc \uc800\uc7a5\nkakao-analyzer --input chat.csv --outdir my_results\n\n# \u26a1 \ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \ube60\ub978 \ud14c\uc2a4\ud2b8\nkakao-analyzer --input big_chat.csv --subset-size 1000 --subset-strategy balanced\n\n# \ud83d\udd27 \uc138\ubc00\ud55c \uc124\uc815 \uc870\uc815\nkakao-analyzer --input chat.csv --topic-window-size 20 --similarity-threshold 0.4\n\n# \ud83c\udfa8 \uace0\ud574\uc0c1\ub3c4 \uadf8\ub798\ud504 \uc0dd\uc131\nkakao-analyzer --input chat.csv --figure-dpi 600\n\n# \ud83d\udd07 \uc870\uc6a9\ud55c \uc2e4\ud589 (CI/CD\uc6a9)\nkakao-analyzer --input chat.csv --quiet --skip-viz --log-level ERROR\n```\n\n## \ud83d\udcc1 \ucd9c\ub825 \uad6c\uc870\n\n\ubd84\uc11d \uc644\ub8cc \ud6c4 \ub2e4\uc74c\uacfc \uac19\uc740 \uad6c\uc870\ub85c \uacb0\uacfc\uac00 \uc0dd\uc131\ub429\ub2c8\ub2e4:\n\n```\noutput_directory/\n\u251c\u2500\u2500 summary/                    # \uc694\uc57d \uc815\ubcf4\n\u2502   \u251c\u2500\u2500 analysis_summary.json   # \uc804\uccb4 \ubd84\uc11d \uc694\uc57d\n\u2502   \u2514\u2500\u2500 processed_messages.csv  # \ucc98\ub9ac\ub41c \uba54\uc2dc\uc9c0 \ub370\uc774\ud130\n\u251c\u2500\u2500 basics/                     # \uae30\ubcf8 \ud1b5\uacc4\n\u2502   \u2514\u2500\u2500 basic_statistics.json   # \uc0c1\uc138 \ud1b5\uacc4 \ub370\uc774\ud130\n\u251c\u2500\u2500 context/                    # \ub9e5\ub77d \ubd84\uc11d\n\u2502   \u251c\u2500\u2500 topic_segments.json     # \uc8fc\uc81c \uc138\uadf8\uba3c\ud2b8 \ub370\uc774\ud130\n\u2502   \u251c\u2500\u2500 topic_segments.csv      # \uc8fc\uc81c \uc138\uadf8\uba3c\ud2b8 \ud14c\uc774\ube14\n\u2502   \u251c\u2500\u2500 mood_analysis.json      # \uac10\uc815 \ubc0f \ubd84\uc704\uae30 \ubd84\uc11d\n\u2502   \u251c\u2500\u2500 advanced_topics.json    # \uace0\uae09 \uc8fc\uc81c \ud074\ub7ec\uc2a4\ud130\ub9c1\n\u2502   \u251c\u2500\u2500 rhythm_analysis.json    # \ub300\ud654 \ub9ac\ub4ec \ubd84\uc11d\n\u2502   \u251c\u2500\u2500 mention_analysis.json   # \uba58\uc158 \ud328\ud134 \ubc0f \ub124\ud2b8\uc6cc\ud06c \ubd84\uc11d\n\u2502   \u251c\u2500\u2500 hybrid_index.meta.json  # \uac80\uc0c9 \uc778\ub371\uc2a4 (SPLADE)\n\u2502   \u2514\u2500\u2500 splade_scores.parquet   # \ud76c\uc18c \ubca1\ud130 \ub370\uc774\ud130 (SPLADE)\n\u251c\u2500\u2500 fun/                        # \uc7ac\ubbf8 \uc9c0\ud45c\n\u2502   \u2514\u2500\u2500 fun_metrics.json        # \ucc38\uc5ec \ubd88\ud3c9\ub4f1, \ub2f5\uc7a5 \uc18d\ub3c4 \ub4f1\n\u251c\u2500\u2500 figures/                    # \uc2dc\uac01\ud654\n\u2502   \u251c\u2500\u2500 heatmap_hour_weekday.png\n\u2502   \u251c\u2500\u2500 timeseries_daily.png\n\u2502   \u251c\u2500\u2500 topic_timeline.png\n\u2502   \u251c\u2500\u2500 wordcloud_global.png\n\u2502   \u251c\u2500\u2500 user_activity_distribution.png\n\u2502   \u2514\u2500\u2500 reply_latency_distribution.png\n\u251c\u2500\u2500 reports/                    # \ub9ac\ud3ec\ud2b8\n\u2502   \u251c\u2500\u2500 analysis_report.md      # \uc885\ud569 \ubd84\uc11d \ub9ac\ud3ec\ud2b8\n\u2502   \u2514\u2500\u2500 qa_test_report.md       # \ud488\uc9c8 \ubcf4\uc99d \ub9ac\ud3ec\ud2b8 (\ud14c\uc2a4\ud2b8\uc2dc)\n\u2514\u2500\u2500 logs/                       # \ub85c\uadf8\n    \u251c\u2500\u2500 pipeline_metadata.json  # \uc2e4\ud589 \uba54\ud0c0\ub370\uc774\ud130\n    \u2514\u2500\u2500 analyzer.log            # \ubd84\uc11d \ub85c\uadf8\n```\n\n## \ud83d\udccb \uc785\ub825 \ub370\uc774\ud130 \ud615\uc2dd\n\n\uce74\uce74\uc624\ud1a1\uc5d0\uc11c \ub0b4\ubcf4\ub0b8 CSV \ud30c\uc77c\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \uc9c0\uc6d0\ud558\ub294 \uceec\ub7fc \ud615\uc2dd:\n\n### \ud544\uc218 \uceec\ub7fc\n- `user` \ub610\ub294 `User` \ub610\ub294 `\uc0ac\uc6a9\uc790`: \uba54\uc2dc\uc9c0 \uc791\uc131\uc790\n- `message` \ub610\ub294 `Message` \ub610\ub294 `\uba54\uc2dc\uc9c0`: \uba54\uc2dc\uc9c0 \ub0b4\uc6a9  \n- `datetime` \ub610\ub294 `Date` \ub610\ub294 `\uc2dc\uac04`: \uba54\uc2dc\uc9c0 \uc2dc\uac04\n\n### \uc608\uc81c CSV \ud615\uc2dd\n```csv\nuser,message,datetime\n\uae40\ubbfc\uc218,\uc548\ub155\ud558\uc138\uc694!,2024-01-01 10:00:00\n\uc774\uc9c0\uc740,\ub124 \uc548\ub155\ud558\uc138\uc694! \u314e\u314e,2024-01-01 10:01:00\n\ubc15\uc11c\uc900,\uc624\ub298 \ub0a0\uc528 \uc88b\ub124\uc694,2024-01-01 10:02:00\n```\n\n## \ud83e\uddea \ud14c\uc2a4\ud2b8\n\n### \uae30\ubcf8 \uae30\ub2a5 \ud14c\uc2a4\ud2b8\n```bash\n# \uae30\ubcf8 \uae30\ub2a5 \ud14c\uc2a4\ud2b8 (\uc758\uc874\uc131 \uc5c6\uc774)\npython simple_test.py\n\n# \uc804\uccb4 \ud14c\uc2a4\ud2b8 \uc2a4\uc704\ud2b8 (\uc758\uc874\uc131 \uc124\uce58 \ud6c4)\npython test_runner.py\n```\n\n### \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130 \uc0dd\uc131\n```bash\n# 1000\uac1c \uba54\uc2dc\uc9c0 \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130 \uc0dd\uc131\npython test_runner.py --generate-data\n```\n\n## \ud83d\udd27 \uace0\uae09 \uc124\uc815\n\n### \ud83d\ude80 GPU \uac00\uc18d \uc9c0\uc6d0 (NEW!)\n- **\uc790\ub3d9 GPU \uc778\uc2dd**: CUDA\uac00 \uc124\uce58\ub41c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc790\ub3d9\uc73c\ub85c GPU \uc0ac\uc6a9\n- **\uba54\ubaa8\ub9ac \ucd5c\uc801\ud654**: GPU \uba54\ubaa8\ub9ac\uc758 75%\uae4c\uc9c0 \uc790\ub3d9 \uc81c\ud55c\ud558\uc5ec \uc548\uc815\uc131 \ubcf4\uc7a5\n- **\ubaa8\ub378 \uc790\ub3d9 \uc774\uad00**: \uc784\ubca0\ub529 \ubc0f SPLADE \ubaa8\ub378\uc744 GPU\ub85c \uc790\ub3d9 \ub85c\ub4dc\n- **\ubc30\uce58 \ud06c\uae30 \ucd5c\uc801\ud654**: GPU \uba54\ubaa8\ub9ac\uc5d0 \ub530\ub77c \ubc30\uce58 \ud06c\uae30 \uc790\ub3d9 \uc870\uc815\n\n#### GPU \uba54\ubaa8\ub9ac\ubcc4 \ucd5c\uc801\ud654\n- **12GB+ (RTX 3080Ti/4080 \uc774\uc0c1)**: \ubc30\uce58 \ud06c\uae30 128, Half precision\n- **8-12GB (RTX 3070/4070)**: \ubc30\uce58 \ud06c\uae30 64, Half precision  \n- **4-8GB (GTX 1660/RTX 3060)**: \ubc30\uce58 \ud06c\uae30 48, Mixed precision\n- **4GB \ubbf8\ub9cc**: CPU \ubaa8\ub4dc\ub85c \uc790\ub3d9 \uc804\ud658\n\n### \uc784\ubca0\ub529 \ubaa8\ub378\n- **\uae30\ubcf8\uac12**: Mock \uc784\ubca0\ub529 (\uc678\ubd80 \uc758\uc874\uc131 \uc5c6\uc74c)\n- **\uace0\uae09 \uc635\uc158**: SentenceTransformer \ubaa8\ub378 (`sentence-transformers` \uc124\uce58 \ud544\uc694)\n- **GPU \uac00\uc18d**: CUDA \uc9c0\uc6d0 \uc2dc \uc790\ub3d9\uc73c\ub85c GPU\uc5d0\uc11c \uc2e4\ud589\n\n### SPLADE \ud558\uc774\ube0c\ub9ac\ub4dc \uac80\uc0c9\n- **\ud65c\uc131\ud654**: `--use-splade` \uc635\uc158 \uc0ac\uc6a9\n- **\uae30\ub2a5**: Dense + Sparse \ubca1\ud130\ub97c \uacb0\ud569\ud55c \uace0\uae09 \uac80\uc0c9\n- **\uc6a9\ub3c4**: \ud2b9\uc815 \uc8fc\uc81c\ub098 \ud0a4\uc6cc\ub4dc\ub85c \ub300\ud654 \uac80\uc0c9\n- **GPU \uac00\uc18d**: Half precision\uc73c\ub85c GPU\uc5d0\uc11c \uace0\uc18d \ucc98\ub9ac\n\n### Ollama \uc5f0\ub3d9 (\ud55c\uad6d\uc5b4 \ubaa8\ub378 \uc644\uc804 \uc9c0\uc6d0)\n- **\ud65c\uc131\ud654**: `--use-ollama` \uc635\uc158 \uc0ac\uc6a9\n- **\uc694\uad6c\uc0ac\ud56d**: Ollama \uc11c\ubc84 \uc2e4\ud589 \uc911\uc774\uc5b4\uc57c \ud568\n- **\uae30\ubcf8 \ubaa8\ub378**: gpt-oss:20b (\ucd94\ucc9c)\n\n#### \ud83c\uddf0\ud83c\uddf7 \uc9c0\uc6d0 \ud55c\uad6d\uc5b4 \ubaa8\ub378\ub4e4\n| \ubaa8\ub378\uba85 | \ud06c\uae30 | \ud2b9\uc9d5 | \uc0ac\uc6a9\ubc95 |\n|--------|------|------|--------|\n| `gpt-oss:20b` | 20B | \ubc94\uc6a9 \ud55c\uad6d\uc5b4 \ubaa8\ub378 (\uae30\ubcf8\uac12) | `--model-name \"gpt-oss:20b\"` |\n| `gpt-oss:40b` | 40B | \uace0\uc131\ub2a5 \ud55c\uad6d\uc5b4 \ubaa8\ub378 | `--model-name \"gpt-oss:40b\"` |\n| `llama3-ko` | 8B | LLaMA3 \ud55c\uad6d\uc5b4 \ud30c\uc778\ud29c\ub2dd | `--model-name \"llama3-ko\"` |\n| `aya:8b` | 8B | \ub2e4\uad6d\uc5b4 \uc9c0\uc6d0 (\ud55c\uad6d\uc5b4 \ud3ec\ud568) | `--model-name \"aya:8b\"` |\n| `gemma2-ko` | 9B | Google Gemma2 \ud55c\uad6d\uc5b4 \ubc84\uc804 | `--model-name \"gemma2-ko\"` |\n| `solar-ko` | 10.7B | Upstage SOLAR \ud55c\uad6d\uc5b4 \ubaa8\ub378 | `--model-name \"solar-ko\"` |\n| `eeve-korean` | 10.8B | \ud55c\uad6d \uc804\uc6a9 \ub300\ud654 \ubaa8\ub378 | `--model-name \"eeve-korean\"` |\n| `beomi-ko` | 13B | \ud55c\uad6d\uc5b4 \ud2b9\ud654 \uace0\uc131\ub2a5 \ubaa8\ub378 | `--model-name \"beomi-ko\"` |\n\n#### \ud83d\ude80 \ubaa8\ub378 \uc124\uce58 \ubc0f \uc0ac\uc6a9\ubc95\n```bash\n# Ollama \uc124\uce58 (\ud55c \ubc88\ub9cc)\ncurl -fsSL https://ollama.ai/install.sh | sh\n\n# \ud55c\uad6d\uc5b4 \ubaa8\ub378 \ub2e4\uc6b4\ub85c\ub4dc (\uc608: gpt-oss:20b)\nollama pull gpt-oss:20b\n\n# \ubd84\uc11d \uc2e4\ud589\nkakao-analyzer --input chat.csv --use-ollama --model-name \"gpt-oss:20b\"\n```\n\n## \ud83d\udcca \ubd84\uc11d \uacb0\uacfc \ud574\uc11d\n\n### \ucc38\uc5ec \ubd88\ud3c9\ub4f1 (\uc9c0\ub2c8 \uacc4\uc218)\n- **0.0-0.3**: \ub9e4\uc6b0 \uade0\ub4f1\ud55c \ucc38\uc5ec\n- **0.3-0.5**: \uc57d\uac04 \ubd88\uade0\ub4f1\n- **0.5-0.7**: \ubd88\uade0\ub4f1\ud55c \ucc38\uc5ec\n- **0.7-1.0**: \ub9e4\uc6b0 \ubd88\uade0\ub4f1 (\uc18c\uc218\uac00 \ub300\ud654 \uc8fc\ub3c4)\n\n### \uba58\uc158 \ubd84\uc11d \uc9c0\ud45c\n- **\uc0c1\ud638 \uba58\uc158 \uad00\uacc4**: \uc11c\ub85c \uba58\uc158\ud558\ub294 \uc0ac\uc6a9\uc790 \uc30d\uc758 \uc218\uc640 \ube48\ub3c4\n- **\uba58\uc158 \ub124\ud2b8\uc6cc\ud06c \ubc00\ub3c4**: \uc804\uccb4 \uac00\ub2a5\ud55c \uba58\uc158 \uad00\uacc4 \ub300\ube44 \uc2e4\uc81c \uba58\uc158 \uad00\uacc4 \ube44\uc728\n- **\uba58\uc158 \ubaa9\uc801 \ubd84\ub958**: \uc9c8\ubb38, \ubd80\ud0c1/\uc694\uccad, \uc778\uc0ac, \uae34\uae09, \ud1a0\ub860/\uc758\uacac \ub4f1\uc73c\ub85c \uc790\ub3d9 \ubd84\ub958\n\n### \ub2f5\uc7a5 \uc18d\ub3c4 \uce74\ud14c\uace0\ub9ac\n- **\uc989\uc11d \ub2f5\uc7a5**: 1\ubd84 \uc774\ub0b4\n- **\ube60\ub978 \ub2f5\uc7a5**: 1-5\ubd84\n- **\ubcf4\ud1b5 \ub2f5\uc7a5**: 5-30\ubd84\n- **\ub290\ub9b0 \ub2f5\uc7a5**: 30\ubd84 \uc774\uc0c1\n\n### \uc8fc\uc81c \uc138\uadf8\uba3c\ud2b8\n- \uc784\ubca0\ub529 \uc720\uc0ac\ub3c4 \uae30\ubc18\uc73c\ub85c \uc790\ub3d9 \uac10\uc9c0\n- \uac01 \uc138\uadf8\uba3c\ud2b8\ubcc4 \ud0a4\uc6cc\ub4dc, \ucc38\uc5ec\uc790, \uc9c0\uc18d\uc2dc\uac04 \uc81c\uacf5\n- \uc8fc\uc81c \uc804\ud658 \ud328\ud134 \ubd84\uc11d\n\n## \ud83c\udfa8 \uc2dc\uac01\ud654 \uac00\uc774\ub4dc\n\n\ubaa8\ub4e0 \uadf8\ub798\ud504\ub294 \ud55c\uad6d\uc5b4 \ud3f0\ud2b8\ub97c \uc9c0\uc6d0\ud558\uba70, \ub2e4\uc74c \ud615\uc2dd\uc73c\ub85c \uc800\uc7a5\ub429\ub2c8\ub2e4:\n- **\ud615\uc2dd**: PNG (\uae30\ubcf8\uac12)\n- **\ud574\uc0c1\ub3c4**: 300 DPI (\uae30\ubcf8\uac12)\n- **\ud06c\uae30**: \uc790\ub3d9 \uc870\uc815\n\n### \uc8fc\uc694 \uc2dc\uac01\ud654\n1. **\ud65c\ub3d9 \ud788\ud2b8\ub9f5**: \uc5b8\uc81c \uac00\uc7a5 \ud65c\ubc1c\ud55c\uc9c0 \ud55c\ub208\uc5d0 \ud30c\uc545\n2. **\uc77c\ubcc4 \ud0c0\uc784\ub77c\uc778**: \uc2dc\uac04\uc5d0 \ub530\ub978 \ub300\ud654\ub7c9 \ubcc0\ud654\n3. **\uc8fc\uc81c \ud0c0\uc784\ub77c\uc778**: \ub300\ud654 \uc8fc\uc81c\uc758 \uc2dc\uac04\uc801 \ud750\ub984\n4. **\uc6cc\ub4dc\ud074\ub77c\uc6b0\ub4dc**: \uc790\uc8fc \uc0ac\uc6a9\ub41c \ub2e8\uc5b4\ub4e4\n5. **\uc0ac\uc6a9\uc790 \ud65c\ub3d9**: \uac01 \ucc38\uc5ec\uc790\uc758 \uae30\uc5ec\ub3c4\n6. **\ub2f5\uc7a5 \uc18d\ub3c4**: \uc18c\ud1b5 \uc2a4\ud0c0\uc77c \ubd84\uc11d\n\n## \ud83d\udca1 \ud65c\uc6a9 \uc0ac\ub840\n\n### \uac1c\uc778/\uadf8\ub8f9 \ubd84\uc11d\n- \uce5c\uad6c\ub4e4\uacfc\uc758 \ub300\ud654 \ud328\ud134 \ubd84\uc11d\n- \uac00\uc871 \ub2e8\ud1a1\ubc29 \ud65c\ub3d9 \ubd84\uc11d\n- \ub3d9\ud638\ud68c/\ucee4\ubba4\ub2c8\ud2f0 \uc18c\ud1b5 \ud328\ud134\n\n### \uc5f0\uad6c \ubaa9\uc801\n- \ub514\uc9c0\ud138 \ucee4\ubba4\ub2c8\ucf00\uc774\uc158 \uc5f0\uad6c\n- \uc0ac\ud68c \ub124\ud2b8\uc6cc\ud06c \ubd84\uc11d\n- \uc5b8\uc5b4\ud559 \uc5f0\uad6c \ub370\uc774\ud130\n\n### \ube44\uc988\ub2c8\uc2a4 \ubd84\uc11d\n- \ud300 \ucee4\ubba4\ub2c8\ucf00\uc774\uc158 \ud6a8\uc728\uc131\n- \uace0\uac1d \uc18c\ud1b5 \ud328\ud134\n- \ucee4\ubba4\ub2c8\ud2f0 \uad00\ub9ac \uc778\uc0ac\uc774\ud2b8\n\n## \ud83d\udee1\ufe0f \uac1c\uc778\uc815\ubcf4 \ubcf4\ud638\n\n- \ubaa8\ub4e0 \ubd84\uc11d\uc740 \ub85c\uceec\uc5d0\uc11c \uc218\ud589\ub429\ub2c8\ub2e4\n- \ub370\uc774\ud130\ub294 \uc678\ubd80\ub85c \uc804\uc1a1\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4\n- \uacb0\uacfc \ud30c\uc77c\uc5d0\ub294 \uc6d0\ubcf8 \uba54\uc2dc\uc9c0\uac00 \ud3ec\ud568\ub420 \uc218 \uc788\uc73c\ub2c8 \uacf5\uc720 \uc2dc \uc8fc\uc758\ud558\uc138\uc694\n- \uac1c\uc778 \uc2dd\ubcc4 \uc815\ubcf4\uac00 \ud3ec\ud568\ub41c \ubd84\uc11d \uacb0\uacfc\ub294 \uc2e0\uc911\ud788 \uad00\ub9ac\ud558\uc138\uc694\n\n## \ud83d\udc1b \ubb38\uc81c \ud574\uacb0\n\n### \uc77c\ubc18\uc801\uc778 \ubb38\uc81c\n\n**1. \ubaa8\ub4c8\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc74c**\n```bash\npip install -r requirements.txt\n```\n\n**2. \ud55c\uad6d\uc5b4 \ud3f0\ud2b8 \ubb38\uc81c**\n- macOS: Apple Gothic \uc790\ub3d9 \uc0ac\uc6a9\n- Windows: Malgun Gothic \uc790\ub3d9 \uc0ac\uc6a9\n- Linux: Noto Sans CJK KR \uc124\uce58 \uad8c\uc7a5\n\n**3. \uba54\ubaa8\ub9ac \ubd80\uc871**\n- \ud070 \ub370\uc774\ud130\uc14b\uc758 \uacbd\uc6b0 `--topic-window-size` \uac12\uc744 \uc904\uc5ec\ubcf4\uc138\uc694\n- \uc784\ubca0\ub529 \ube44\ud65c\uc131\ud654: \uc124\uc815\uc5d0\uc11c `use_embeddings = False`\n\n**4. CSV \uc778\ucf54\ub529 \ubb38\uc81c**\n- \uc790\ub3d9 \uc778\ucf54\ub529 \uac10\uc9c0 \uae30\ub2a5 \ub0b4\uc7a5\n- \uc218\ub3d9 \uc9c0\uc815\uc774 \ud544\uc694\ud55c \uacbd\uc6b0 \ud30c\uc77c\uc744 UTF-8\ub85c \ubcc0\ud658\n\n### \ub85c\uadf8 \ud655\uc778\n```bash\n# \uc0c1\uc138 \ub85c\uadf8\ub85c \uc2e4\ud589\nkakao-analyzer --input chat.csv --log-level DEBUG\n\n# \ub85c\uadf8 \ud30c\uc77c \ud655\uc778 (\uae30\ubcf8 \ucd9c\ub825 \ub514\ub809\ud1a0\ub9ac)\ncat chat_analysis/logs/run.log\n```\n\n## \ud83d\udcc8 \uc131\ub2a5 \ucd5c\uc801\ud654\n\n### \ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \ucc98\ub9ac\n- **\ubc30\uce58 \ud06c\uae30 \uc870\uc815**: \uc124\uc815\uc5d0\uc11c `batch_size` \ubcc0\uacbd\n- **\uc784\ubca0\ub529 \ube44\ud65c\uc131\ud654**: \uae30\ubcf8 \ubd84\uc11d\ub9cc \ud544\uc694\ud55c \uacbd\uc6b0\n- **\uc708\ub3c4\uc6b0 \ud06c\uae30 \uac10\uc18c**: \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9 \uc808\uc57d\n\n### \uc18d\ub3c4 \ud5a5\uc0c1\n- **\ubcd1\ub82c \ucc98\ub9ac**: \uac00\ub2a5\ud55c \uacf3\uc5d0\uc11c \uc790\ub3d9 \uc801\uc6a9\n- **\uce90\uc2f1**: \uc911\uac04 \uacb0\uacfc \uc790\ub3d9 \uc800\uc7a5\n- **\ucd5c\uc801\ud654\ub41c \uc54c\uace0\ub9ac\uc998**: \ub300\uc6a9\ub7c9 \ub370\uc774\ud130 \ub300\uc751\n\n## \ud83d\udea7 \ub85c\ub4dc\ub9f5\n\n\ud604\uc7ac \uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \uc9c0\uc18d\uc801\uc73c\ub85c \uac1c\ubc1c \uc911\uc774\uba70, \ub2e4\uc74c\uacfc \uac19\uc740 \uae30\ub2a5\ub4e4\uc774 \ucd94\uac00\ub420 \uc608\uc815\uc785\ub2c8\ub2e4:\n\n### \ud83d\udd2e \uc608\uc815\ub41c \uae30\ub2a5\ub4e4\n- **\ud83c\udf10 \ub2e4\uc911 \uba54\uc2e0\uc800 \uc9c0\uc6d0**: \ub77c\uc778, \ud154\ub808\uadf8\ub7a8, \ub514\uc2a4\ucf54\ub4dc \ub4f1 \ub2e4\ub978 \uba54\uc2e0\uc800 \ud50c\ub7ab\ud3fc \uc9c0\uc6d0\n- **\ud83d\udcf1 \uc6f9 \uc778\ud130\ud398\uc774\uc2a4**: \ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \uc9c1\uad00\uc801\uc778 UI\n- **\u26a1 \uc2e4\uc2dc\uac04 \ubd84\uc11d**: \ub300\ud654 \uc9c4\ud589 \uc911 \uc2e4\uc2dc\uac04 \ud328\ud134 \ubd84\uc11d\n- **\ud83e\udd16 \uace0\uae09 AI \uae30\ub2a5**: GPT-4 \ud1b5\ud569, \ub354 \uc815\uad50\ud55c \uac10\uc815 \ubd84\uc11d\n- **\ud83d\udcca \ub300\uc2dc\ubcf4\ub4dc**: \uc2e4\uc2dc\uac04 \ubaa8\ub2c8\ud130\ub9c1 \ubc0f \uc54c\ub9bc \uc2dc\uc2a4\ud15c\n- **\ud83d\udd0d \uac80\uc0c9 \uc5d4\uc9c4**: \ub300\ud654 \ub0b4\uc6a9 \uace0\uae09 \uac80\uc0c9 \ubc0f \ud544\ud130\ub9c1\n- **\ud83d\udcc8 \ud2b8\ub80c\ub4dc \ubd84\uc11d**: \uc2dc\uac04\uc5d0 \ub530\ub978 \ub300\ud654 \ud328\ud134 \ubcc0\ud654 \ucd94\uc801\n- **\ud83c\udfa8 \ud14c\ub9c8 \ucee4\uc2a4\ud130\ub9c8\uc774\uc81c\uc774\uc158**: \uc2dc\uac01\ud654 \uc2a4\ud0c0\uc77c \ubc0f \uc0c9\uc0c1 \ud14c\ub9c8 \uc120\ud0dd\n- **\ud83d\udcbe \ud074\ub77c\uc6b0\ub4dc \ubc31\uc5c5**: \ubd84\uc11d \uacb0\uacfc \uc790\ub3d9 \ubc31\uc5c5 \ubc0f \ub3d9\uae30\ud654\n- **\ud83d\udce7 \ub9ac\ud3ec\ud2b8 \uc790\ub3d9 \ubc1c\uc1a1**: \uc815\uae30\uc801\uc778 \ubd84\uc11d \ub9ac\ud3ec\ud2b8 \uc774\uba54\uc77c \ubc1c\uc1a1\n\n### \ud83c\udfaf \ub2e4\uc74c \ubc84\uc804 (v1.1.0) \uc608\uc815 \uae30\ub2a5\n- \uc74c\uc131 \uba54\uc2dc\uc9c0 \uae38\uc774 \ubd84\uc11d\n- \ud30c\uc77c \uacf5\uc720 \ud328\ud134 \ubd84\uc11d\n- \ub300\ud654\ubc29 \ucc38\uc5ec\uc790 \ubcc0\ud654 \ucd94\uc801\n- \uac10\uc815 \ubcc0\ud654 \uc2dc\uacc4\uc5f4 \ubd84\uc11d\n- \ud0a4\uc6cc\ub4dc \uc54c\ub9bc \uc2dc\uc2a4\ud15c\n\n## \ud83d\udc68\u200d\ud83d\udcbb \uac1c\ubc1c\uc790\n\n### \ud83c\udf93 \uc8fc \uac1c\ubc1c\uc790\n\n- **xistoh162108** (KAIST)\n  - \ud83d\udce7 \uc774\uba54\uc77c: xistoh162108@kaist.ac.kr\n  - \ud83c\udfeb \uc18c\uc18d: \ud55c\uad6d\uacfc\ud559\uae30\uc220\uc6d0 (KAIST)\n  - \ud83d\udd17 GitHub: [@xistoh162108](https://github.com/xistoh162108)\n\n### \ud83e\udd16 AI \ud611\ub825 \uac1c\ubc1c\n\n- **Claude AI** (Anthropic)\n  - \ucf54\ub4dc \uc544\ud0a4\ud14d\ucc98 \uc124\uacc4 \ubc0f \uad6c\ud604\n  - \uc54c\uace0\ub9ac\uc998 \ucd5c\uc801\ud654 \ubc0f \ud55c\uad6d\uc5b4 \ud2b9\ud654 \uae30\ub2a5\n  - \ubb38\uc11c\ud654 \ubc0f \uc0ac\uc6a9\uc790 \uacbd\ud5d8 \uac1c\uc120\n\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 **\uc778\uac04-AI \ud611\uc5c5**\uc758 \uacb0\uacfc\ubb3c\ub85c, \ud559\uc220 \uc5f0\uad6c\uc640 \uc2e4\uc6a9\uc801 \ub3c4\uad6c \uac1c\ubc1c\uc758 \ub9cc\ub0a8\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.\n\n## \ud83e\udd1d \uae30\uc5ec\ud558\uae30\n\n### \ud83d\udd17 \ud611\uc5c5 \ubc29\uc2dd\n\n- **\uc774\uc288 \ub9ac\ud3ec\ud305**: [GitHub Issues](https://github.com/xistoh162108/kakaotalk_analyzer/issues)\n- **\uae30\ub2a5 \uc81c\uc548**: Pull Request \ud658\uc601\n- **\ud559\uc220 \ud611\ub825**: \uc5f0\uad6c \ubaa9\uc801 \uc0ac\uc6a9 \uc2dc \uc778\uc6a9 \ubd80\ud0c1\ub4dc\ub9bd\ub2c8\ub2e4\n\n### \ud83d\udca1 \uac1c\uc120 \uc544\uc774\ub514\uc5b4\n\n- \uc0c8\ub85c\uc6b4 \ubd84\uc11d \uc9c0\ud45c \ucd94\uac00\n- \ub2e4\ub978 \uba54\uc2e0\uc800 \uc9c0\uc6d0 (\ub77c\uc778, \ud154\ub808\uadf8\ub7a8 \ub4f1)\n- \uc6f9 \uc778\ud130\ud398\uc774\uc2a4 \uac1c\ubc1c\n- \uc2e4\uc2dc\uac04 \ubd84\uc11d \uae30\ub2a5\n\n### \ud83d\udcdd \uc778\uc6a9 (Citation)\n\n\ud559\uc220 \ub17c\ubb38\uc774\ub098 \uc5f0\uad6c\uc5d0\uc11c \uc0ac\uc6a9\ud558\uc2e4 \ub54c:\n\n```bibtex\nxistoh162108, & Claude AI. (2025). Kakao Talk Analyzer: \nComprehensive analysis tool for KakaoTalk chat exports (v1.0.1). \nhttps://github.com/xistoh162108/kakaotalk_analyzer\n```\n\n## \ud83d\udcc4 \ub77c\uc774\uc120\uc2a4\n\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 MIT \ub77c\uc774\uc120\uc2a4 \ud558\uc5d0 \ubc30\ud3ec\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 [LICENSE](LICENSE) \ud30c\uc77c\uc744 \ucc38\uace0\ud558\uc138\uc694.\n\n## \ud83d\ude4f \uac10\uc0ac\uc758 \ub9d0\n\n- **\ud55c\uad6d\uc5b4 \uc790\uc5f0\uc5b4 \ucc98\ub9ac**: KoNLPy, mecab-python3\n- **\uc2dc\uac01\ud654**: matplotlib, seaborn, wordcloud\n- **\ub370\uc774\ud130 \ucc98\ub9ac**: pandas, numpy\n- **\uba38\uc2e0\ub7ec\ub2dd**: scikit-learn, sentence-transformers\n\n---\n\n**\ud83e\udd16 Generated with [Claude Code](https://claude.ai/code)**\n\nCo-Authored-By: Claude <noreply@anthropic.com>\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Comprehensive analysis tool for KakaoTalk chat exports",
    "version": "1.0.2",
    "project_urls": {
        "Bug Reports": "https://github.com/xistoh162108/kakaotalk_analyzer/issues",
        "Documentation": "https://github.com/xistoh162108/kakaotalk_analyzer/blob/main/README.md",
        "Homepage": "https://github.com/xistoh162108/kakaotalk_analyzer",
        "Source": "https://github.com/xistoh162108/kakaotalk_analyzer"
    },
    "split_keywords": [
        "kakao",
        "kakaotalk",
        "chat",
        "analysis",
        "nlp",
        "korean",
        "messaging"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e3b63e0dabe4720f1dfd8b4c4aa95e9fbc19e6b8157a4b23809c5f1ca192de8f",
                "md5": "ee055c18974ab2b384871b2363a12ff9",
                "sha256": "2a3c154a5b04d8936c6d8d140b689e5c97d1a291387df9c6527c4d8832efc7b7"
            },
            "downloads": -1,
            "filename": "kakao_analyzer-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ee055c18974ab2b384871b2363a12ff9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 107244,
            "upload_time": "2025-08-14T08:53:29",
            "upload_time_iso_8601": "2025-08-14T08:53:29.031586Z",
            "url": "https://files.pythonhosted.org/packages/e3/b6/3e0dabe4720f1dfd8b4c4aa95e9fbc19e6b8157a4b23809c5f1ca192de8f/kakao_analyzer-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "846d863a8d2c93da2cb710da2d1432b4e0bd13937e6c97bccda867f49192f532",
                "md5": "6eef039d2a61b6b75e3fb7916f44add0",
                "sha256": "d77e46fb96b2bda7e8082dda971862909ea54021c015ae742a14249612f1f562"
            },
            "downloads": -1,
            "filename": "kakao_analyzer-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "6eef039d2a61b6b75e3fb7916f44add0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 103692,
            "upload_time": "2025-08-14T08:53:30",
            "upload_time_iso_8601": "2025-08-14T08:53:30.664790Z",
            "url": "https://files.pythonhosted.org/packages/84/6d/863a8d2c93da2cb710da2d1432b4e0bd13937e6c97bccda867f49192f532/kakao_analyzer-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-14 08:53:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "xistoh162108",
    "github_project": "kakaotalk_analyzer",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "pandas",
            "specs": [
                [
                    ">=",
                    "1.5.0"
                ]
            ]
        },
        {
            "name": "numpy",
            "specs": [
                [
                    ">=",
                    "1.21.0"
                ]
            ]
        },
        {
            "name": "matplotlib",
            "specs": [
                [
                    ">=",
                    "3.5.0"
                ]
            ]
        },
        {
            "name": "seaborn",
            "specs": [
                [
                    ">=",
                    "0.11.0"
                ]
            ]
        },
        {
            "name": "wordcloud",
            "specs": [
                [
                    ">=",
                    "1.8.0"
                ]
            ]
        },
        {
            "name": "scikit-learn",
            "specs": [
                [
                    ">=",
                    "1.1.0"
                ]
            ]
        },
        {
            "name": "sentence-transformers",
            "specs": [
                [
                    ">=",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "torch",
            "specs": [
                [
                    ">=",
                    "1.13.0"
                ]
            ]
        },
        {
            "name": "transformers",
            "specs": [
                [
                    ">=",
                    "4.21.0"
                ]
            ]
        },
        {
            "name": "chardet",
            "specs": [
                [
                    ">=",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "tqdm",
            "specs": [
                [
                    ">=",
                    "4.60.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.25.0"
                ]
            ]
        }
    ],
    "lcname": "kakao-analyzer"
}
        
Elapsed time: 2.07956s