# 路径改动总结

## 改动概述

将数据处理脚本从硬编码路径改为配置驱动的路径管理，支持多账号批量处理。

## 核心变化

### 1. 目录结构

**原始数据目录保持不变**，只新增 `how解构/` 输出目录：

```
data/账号/阿里多多酱/
├── what解构/                    # 原始数据（不动）
├── what解构_所有帖子/           # 原始数据（不动）
├── pattern/                     # 原始数据（不动）
│   └── cluster/
│       └── clustered_data.json
└── how解构/                     # 新增：所有输出结果
    ├── intermediate/            # 中间结果
    │   ├── 特征名称_分类映射.json
    │   ├── 分类层级映射.json
    │   ├── 特征名称_帖子来源.json
    │   └── 当前帖子_解构任务列表.json
    ├── results/                 # how解构最终结果
    │   └── *_how.json
    └── visualization/           # 可视化结果
        └── how解构结果_可视化.html
```

### 2. 路径对照表

| 文件类型 | 旧路径 | 新路径 |
|---------|--------|--------|
| pattern聚合结果 | `data/data_1118/过去帖子_pattern聚合结果.json` | `data/账号/阿里多多酱/pattern/cluster/clustered_data.json` |
| 当前帖子what解构 | `data/data_1118/当前帖子_what解构结果/` | `data/账号/阿里多多酱/what解构/` |
| 过去帖子what解构 | `data/data_1118/过去帖子_what解构结果/` | `data/账号/阿里多多酱/what解构_所有帖子/` |
| 特征分类映射 | `data/data_1118/特征名称_分类映射.json` | `data/账号/阿里多多酱/how解构/intermediate/特征名称_分类映射.json` |
| 分类层级映射 | `data/data_1118/分类层级映射.json` | `data/账号/阿里多多酱/how解构/intermediate/分类层级映射.json` |
| 特征帖子来源 | `data/data_1118/特征名称_帖子来源.json` | `data/账号/阿里多多酱/how解构/intermediate/特征名称_帖子来源.json` |
| 解构任务列表 | `data/data_1118/当前帖子_解构任务列表.json` | `data/账号/阿里多多酱/how解构/intermediate/当前帖子_解构任务列表.json` |
| how解构结果 | `data/data_1118/当前帖子_how解构结果/` | `data/账号/阿里多多酱/how解构/results/` |
| 可视化结果 | `data/data_1118/当前帖子_how解构结果_可视化.html` | `data/账号/阿里多多酱/how解构/visualization/how解构结果_可视化.html` |

## 修改的文件

### 新增文件

1. **`config/accounts.json`** - 账号配置文件
2. **`script/data_processing/path_config.py`** - 路径配置管理类
3. **`script/data_processing/run_all_with_config.sh`** - 支持多账号的运行脚本
4. **`script/data_processing/migrate_data_structure.sh`** - 数据迁移脚本（已不需要）

### 修改的文件

1. **`script/data_processing/extract_feature_categories.py`**
   - 添加 `from script.data_processing.path_config import PathConfig`
   - 使用 `PathConfig` 替代硬编码路径

2. **`script/data_processing/extract_features_from_posts.py`**
   - 添加 `from script.data_processing.path_config import PathConfig`
   - 使用 `PathConfig` 替代硬编码路径

3. **`script/data_processing/extract_current_posts.py`**
   - 添加 `from script.data_processing.path_config import PathConfig`
   - 使用 `PathConfig` 替代硬编码路径

4. **`script/data_processing/match_inspiration_features.py`**
   - 添加 `from script.data_processing.path_config import PathConfig`
   - 使用 `PathConfig` 替代硬编码路径

5. **`script/data_processing/visualize_how_results.py`**
   - 添加 `from script.data_processing.path_config import PathConfig`
   - 修改 `load_feature_category_mapping()` 和 `load_feature_source_mapping()` 函数接受 `PathConfig` 参数
   - 使用 `PathConfig` 替代硬编码路径

6. **`script/data_processing/run_all.sh`** (旧版本，已更新路径但建议使用新版本)
   - 更新所有 echo 输出中的路径描述

## 使用方式

### 单账号处理

```bash
# 方式1：命令行参数
./script/data_processing/run_all_with_config.sh 阿里多多酱

# 方式2：环境变量
ACCOUNT_NAME=阿里多多酱 ./script/data_processing/run_all_with_config.sh

# 方式3：使用默认账号（配置文件中的 default_account）
./script/data_processing/run_all_with_config.sh
```

### 批量处理多个账号

```bash
# 处理所有在配置文件中启用的账号
./script/data_processing/run_all_with_config.sh --all
```

### Python脚本中使用

```python
from script.data_processing.path_config import PathConfig

# 获取路径配置
config = PathConfig()  # 使用默认账号
# 或
config = PathConfig(account_name="阿里多多酱")

# 使用路径
input_file = config.pattern_cluster_file
output_file = config.feature_category_mapping_file

# 确保输出目录存在
config.ensure_dirs()

# 读写文件
with open(input_file, 'r') as f:
    data = json.load(f)

with open(output_file, 'w') as f:
    json.dump(result, f)
```

## 添加新账号

1. 创建账号目录和原始数据：
```bash
mkdir -p "data/账号/新账号名/what解构"
mkdir -p "data/账号/新账号名/what解构_所有帖子"
mkdir -p "data/账号/新账号名/pattern/cluster"
# 放入原始数据...
```

2. 在 `config/accounts.json` 中添加配置：
```json
{
  "name": "新账号名",
  "enabled": true,
  "description": "新账号描述"
}
```

3. 运行处理脚本：
```bash
./script/data_processing/run_all_with_config.sh 新账号名
```

## 迁移说明

从旧版本迁移到新版本：

1. **数据无需迁移**：原始数据路径保持不变
2. **删除旧输出**：可以删除 `data/data_1118/` 下的中间结果和输出文件
3. **使用新脚本**：用 `run_all_with_config.sh` 替代 `run_all.sh`

## 优势

1. ✅ **原始数据安全**：不修改原始数据目录结构
2. ✅ **输出结构清晰**：所有输出集中在 `how解构/` 目录
3. ✅ **支持多账号**：轻松管理和批量处理多个账号
4. ✅ **配置驱动**：通过配置文件灵活调整路径
5. ✅ **易于维护**：统一的路径管理，避免硬编码
6. ✅ **向后兼容**：旧的 `run_all.sh` 仍可使用（路径已更新）

## 验证

验证配置是否正确：

```bash
# 查看路径配置
python script/data_processing/path_config.py 阿里多多酱

# 测试路径并创建输出目录
python -c "from script.data_processing.path_config import PathConfig; config = PathConfig('阿里多多酱'); config.check_and_print_status(); config.ensure_dirs()"
```

## 注意事项

1. 运行脚本前确保账号目录下有完整的原始数据
2. 首次运行时会自动创建 `how解构/` 目录及子目录
3. 可通过环境变量 `ACCOUNT_NAME` 指定账号，方便CI/CD集成
4. 批量处理时，某个账号失败不会影响其他账号的处理
