feat: 重构项目结构并添加平台同步基础架构

- 重构项目目录结构,将功能模块移至 modules/ 目录
- 创建平台同步基础架构,包括发布器基类和 GitHub 发布器
- 新增 UI 状态管理模块 (modules/ui/state.py) 统一管理会话状态
- 更新依赖配置,添加平台同步所需依赖 (httpx, pyperclip)
- 整理文档结构,将所有文档分类移至 docs/ 目录
- 添加 .cursorrules 文件定义项目开发规范
- 清理根目录重复文件,保持项目结构整洁
This commit is contained in:
刘国栋
2026-01-30 10:21:29 +08:00
parent 77d5ec70f8
commit 8f7f082c3d
102 changed files with 33742 additions and 1526 deletions
+188
View File
@@ -0,0 +1,188 @@
# 深度目录结构优化方案
## 📊 当前问题分析
### 根目录文件统计
**Python 文件(根目录)**:约30+个
- 主程序:1个(`geo_tool.py` - 必须保留)
- 重复模块文件:18个(已在 `modules/` 中,应删除根目录版本)
- 工具脚本:5个(可移动到 `scripts/` 目录)
- 配置文件:1个(`requirements.txt` - 必须保留)
**问题**
1. ❌ 根目录有大量重复的模块文件(既在根目录又在 `modules/`
2. ❌ 工具脚本混在根目录
3. ❌ 根目录文件过多,不够整洁
## 🎯 优化目标
### 理想根目录结构
```
geo_tool/
├── README.md # 项目主文档
├── DOCS.md # 文档索引
├── requirements.txt # 依赖文件
├── .gitignore # Git配置
├── .streamlit/ # Streamlit配置
│ └── config.toml
├── geo_tool.py # 主程序(唯一入口)
├── modules/ # 功能模块
│ └── [所有模块文件]
├── platform_sync/ # 平台同步模块
│ └── [平台同步文件]
├── scripts/ # 工具脚本(新增)
│ ├── cleanup_duplicate_docs.py
│ ├── move_reorganization_docs.py
│ ├── reorganize_files.py
│ ├── update_imports.py
│ └── update_doc_references.py
└── docs/ # 文档目录
├── features/
├── analysis/
├── guides/
└── implementation/
```
## 📋 优化步骤
### 步骤1:清理重复模块文件
**需要删除的根目录文件**18个,已在 `modules/` 中):
- `config_optimizer.py`
- `content_metrics.py`
- `content_scorer.py`
- `data_storage.py`
- `eeat_enhancer.py`
- `fact_density_enhancer.py`
- `keyword_mining.py`
- `keyword_tool.py`
- `multimodal_prompt.py`
- `negative_monitor.py`
- `optimization_techniques.py`
- `resource_recommender.py`
- `roi_analyzer.py`
- `schema_generator.py`
- `semantic_expander.py`
- `storage_example.py`
- `technical_config_generator.py`
- `topic_cluster.py`
- `workflow_automation.py`
**影响评估**
- ⚠️ **中等影响**:需要更新 `geo_tool.py` 中的导入路径
-**安全**`modules/` 中已有完整版本
### 步骤2:移动工具脚本
**需要移动到 `scripts/` 的文件**5个):
- `scripts/cleanup_duplicate_docs.py`
- `scripts/move_reorganization_docs.py`
- `scripts/reorganize_files.py`
- `scripts/update_imports.py`
- `scripts/update_doc_references.py`
**影响评估**
-**低影响**:这些是工具脚本,不参与主程序运行
-**安全**:只是位置移动,不影响功能
### 步骤3:更新导入路径
**需要更新的文件**
1. `geo_tool.py` - 更新所有模块导入(从 `from xxx import` 改为 `from modules.xxx import`
2. `modules/storage_example.py` - 更新 `data_storage` 导入
**影响评估**
- ⚠️ **关键影响**:必须正确更新,否则程序无法运行
-**自动化**:可以使用 `scripts/update_imports.py` 脚本自动更新
## 🔧 实施计划
### 阶段1:准备(低风险)
1. ✅ 创建 `scripts/` 目录
2. ✅ 创建清理脚本
3. ✅ 备份关键文件
### 阶段2:移动工具脚本(低风险)
1. 移动工具脚本到 `scripts/`
2. 更新脚本中的路径引用(如果需要)
3. 验证脚本仍可正常运行
### 阶段3:清理重复文件(中等风险)
1. 确认 `modules/` 中所有文件完整
2. 更新 `geo_tool.py` 的导入路径
3. 删除根目录的重复文件
4. 测试程序运行
### 阶段4:验证(必须)
1. 运行 `python -c "from modules.data_storage import DataStorage"`
2. 运行 `streamlit run geo_tool.py`
3. 测试所有功能模块
## ⚠️ 风险评估
### 改动影响
| 操作 | 影响程度 | 风险等级 | 回滚难度 |
|------|---------|---------|---------|
| 移动工具脚本 | 低 | 低 | 容易 |
| 删除重复模块文件 | 中 | 中 | 中等 |
| 更新导入路径 | 高 | 中 | 容易(有脚本) |
### 风险缓解措施
1. **Git 提交**:每步完成后立即提交,便于回滚
2. **自动化脚本**:使用脚本自动更新,减少人为错误
3. **分步执行**:分阶段执行,每步验证后再继续
4. **备份**:关键文件备份
## 📝 执行命令
### 快速执行(推荐)
```powershell
# 1. 创建 scripts 目录
New-Item -ItemType Directory -Force -Path scripts
# 2. 移动工具脚本
Move-Item cleanup_duplicate_docs.py scripts\ -Force
Move-Item move_reorganization_docs.py scripts\ -Force
Move-Item reorganize_files.py scripts\ -Force
Move-Item update_imports.py scripts\ -Force
Move-Item update_doc_references.py scripts\ -Force
# 3. 更新导入路径(在移动脚本后)
python scripts/update_imports.py
# 4. 删除重复模块文件(在更新导入后)
# 使用 cleanup_duplicate_modules.py 脚本
```
## ✅ 优化后的优势
1. **根目录极简**:只保留必要的入口文件
2. **结构清晰**:功能模块、工具脚本、文档分类明确
3. **易于维护**:新功能添加时,只需在对应目录操作
4. **符合最佳实践**:遵循Python项目标准结构
## 🎯 最终根目录文件(约5个)
```
geo_tool/
├── README.md # 项目主文档
├── DOCS.md # 文档索引
├── requirements.txt # 依赖文件
├── geo_tool.py # 主程序
└── .gitignore # Git配置
```
**对比**:从 30+ 个文件减少到 5 个核心文件!
+293
View File
@@ -0,0 +1,293 @@
# 平台文章同步功能决策指南
> 基于项目现状、GEO目标、实现成本和用户价值的综合决策分析
## 🎯 核心问题
**是否要实现20个平台的文章同步功能?如何实现?**
---
## 📊 决策矩阵分析
### 方案对比
| 方案 | 实现成本 | 用户价值 | GEO效果 | 技术风险 | 推荐度 |
|------|---------|---------|---------|---------|--------|
| **方案A:完整实现(20平台)** | 10周 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| **方案BMVP版本(5平台)** | 3-4周 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| **方案C:仅新增平台内容生成** | 1-2周 | ⭐⭐⭐ | ⭐⭐⭐ | ⭐ | ⭐⭐⭐⭐ |
| **方案D:暂不实现** | 0 | ⭐ | ⭐ | ⭐ | ⭐⭐ |
---
## 💡 推荐方案:分阶段实施(方案B → 方案A)
### 为什么推荐分阶段?
1. **降低风险**:先验证可行性,再全面铺开
2. **快速验证**3-4周看到效果,验证用户需求
3. **灵活调整**:根据用户反馈调整方向
4. **资源优化**:避免一次性投入过大
---
## 🚀 阶段一:MVP版本(强烈推荐先做)⭐⭐⭐⭐⭐
### 目标
**3-4周实现5个核心平台的发布功能**
### 选择平台
1.**GitHub**1-2天)- 最简单,验证架构
2.**微信公众号**3-4天)- 用户价值最高
3.**B站**3-4天)- 用户量大,API完善
4.**知乎**(3-4天)- 用户量大,API相对完善
5.**CSDN**3-4天)- 技术平台,API支持
### 为什么选择这5个?
-**API支持好**:都有完善的API文档
-**用户价值高**:覆盖主要内容平台
-**技术风险低**:实现难度中等
-**验证价值大**:能验证整体架构
### 同时完成
-**新增8个平台的内容生成**1-2周)
- 只需创建Prompt模板
- 工作量小,价值高
- 满足运营需求
### 产出
- 5个平台自动发布功能
- 8个新增平台内容生成
- 验证架构可行性
- 用户反馈收集
---
## 📈 阶段二:根据反馈决定是否扩展
### 决策点1:MVP版本用户反馈如何?
**如果反馈好** → 继续阶段二
- 实现剩余3个API平台(百家号、企鹅号、网易号)
- 实现一键复制功能(12个平台)
- 添加批量发布功能
**如果反馈一般** → 暂停扩展
- 优化现有5个平台
- 专注于其他GEO功能
### 决策点2:运营需求是否紧急?
**如果紧急** → 快速实现一键复制
- 12个平台一键复制功能(1-2周)
- 满足"覆盖20个平台"的需求
- 虽然不能自动发布,但能大幅提升效率
**如果不紧急** → 按计划实施
- 先完善API平台
- 再实现一键复制
---
## ⚖️ 关键决策因素
### 1. 对GEO效果的直接影响
**文章同步功能的价值**
-**扩大内容投放**:更多平台 = 更多曝光
-**提升发布效率**:自动化减少人工成本
- ⚠️ **间接影响**:内容已经生成,同步只是效率提升
**对比其他功能**
- JSON-LD Schema:直接提升实体识别 ⭐⭐⭐⭐⭐
- 语义扩展:从"点"到"面"占领 ⭐⭐⭐⭐
- 文章同步:提升发布效率 ⭐⭐⭐
### 2. 实现成本
| 方案 | 工作量 | 开发周期 | 维护成本 |
|------|--------|---------|---------|
| MVP5平台) | 15-20天 | 3-4周 | 低 |
| 完整版(20平台) | 60-82天 | 10周 | 中-高 |
| 仅内容生成(8平台) | 5-7天 | 1-2周 | 低 |
### 3. 用户价值
**高价值场景**
- 需要多平台发布的内容团队
- 需要批量发布的运营团队
- 需要追踪发布状态的管理者
**中等价值场景**
- 偶尔发布内容的个人用户
- 只关注1-2个平台的用户
### 4. 技术风险
**低风险**
- GitHub、微信公众号、B站、知乎、CSDN(API完善)
- 一键复制功能(技术简单)
**中风险**
- 百家号、企鹅号、网易号(API状态需确认)
- OAuth2.0认证流程(复杂度中等)
**高风险**
- 平台API变更
- 账号被封禁风险
---
## 🎯 最终推荐决策
### 推荐方案:**分阶段实施**
#### 第一步:立即开始(1-2周)
1.**实现GitHub发布功能**1-2天)
- 验证架构可行性
- 风险最低
- 快速看到效果
2.**新增8个平台的内容生成**5-7天)
- 满足运营需求
- 工作量小
- 价值高
#### 第二步:MVP版本(3-4周)
3.**实现5个核心平台发布**15-20天)
- GitHub、微信公众号、B站、知乎、CSDN
- 验证用户需求
- 收集反馈
#### 第三步:根据反馈决定(可选)
4. ⚠️ **如果反馈好** → 继续扩展
- 剩余3个API平台
- 一键复制功能
- 批量发布
5. ⚠️ **如果反馈一般** → 暂停扩展
- 优化现有功能
- 专注其他GEO功能
---
## 📋 决策检查清单
### 开始前需要确认
- [ ] **运营需求是否紧急?**
- 紧急 → 优先实现一键复制(快速满足需求)
- 不紧急 → 按MVP方案实施
- [ ] **是否有开发资源?**
- 有1-2个开发者 → 可以开始
- 资源紧张 → 先做新增平台内容生成
- [ ] **用户是否真的需要?**
- 有明确需求 → 开始实施
- 需求不明确 → 先做MVP验证
- [ ] **是否有平台账号?**
- 有企业认证账号 → 可以接入API平台
- 只有个人账号 → 优先一键复制平台
### 实施中需要监控
- [ ] **技术可行性验证**
- GitHub发布是否成功?
- 架构是否合理?
- [ ] **用户反馈收集**
- 用户是否使用?
- 是否有问题?
- [ ] **成本控制**
- 开发时间是否超预期?
- 是否需要调整计划?
---
## 💰 成本效益分析
### MVP版本(5平台)
**成本**
- 开发时间:3-4周
- 维护成本:低(每月1-2天)
**收益**
- 5个主要平台自动发布
- 8个新增平台内容生成
- 验证架构可行性
- 收集用户反馈
**ROI**:⭐⭐⭐⭐(高)
### 完整版本(20平台)
**成本**
- 开发时间:10周
- 维护成本:中-高(每月3-4天)
**收益**
- 20个平台全覆盖
- 批量发布功能
- 完整的发布管理系统
**ROI**:⭐⭐⭐(中-高,取决于用户需求)
---
## 🎯 最终建议
### 强烈推荐:**先做MVP版本**
**理由**
1.**快速验证**3-4周看到效果
2.**降低风险**:避免一次性投入过大
3.**灵活调整**:根据反馈决定是否扩展
4.**满足需求**:5个核心平台 + 8个新增平台内容生成
### 实施路径
**第1-2周**
- GitHub发布功能(验证架构)
- 新增8个平台内容生成(满足运营需求)
**第3-4周**
- 微信公众号、B站、知乎、CSDN发布功能
- 测试和优化
**第5周**
- 收集用户反馈
- 决定是否继续扩展
---
## ⚠️ 风险提示
1. **API状态不确定**:企鹅号、网易号API需确认
2. **企业认证要求**:百家号等需要企业认证
3. **开发周期**:完整版10周,需要合理安排资源
4. **用户需求**:需要验证用户是否真的需要
---
## 📝 决策记录
**推荐决策**:✅ **先做MVP版本(5平台 + 8个新增平台内容生成)**
**实施时间**3-4周
**下一步行动**
1. 实现GitHub发布功能(1-2天)
2. 新增8个平台内容生成(5-7天)
3. 实现剩余4个API平台发布(15-20天)
4. 收集用户反馈
5. 决定是否继续扩展
---
**决策日期**2025-01-26
**决策依据**:项目现状分析 + 成本效益分析 + 风险评估
+124
View File
@@ -0,0 +1,124 @@
# 文档清理指南
## 📋 根目录文档保留策略
### ✅ 必须保留在根目录的文档
1. **README.md** - 项目主文档(GitHub/GitLab 标准要求)
2. **DOCS.md** - 文档索引(方便快速查找所有文档)
### 📌 重组相关文档(建议移动到 docs/guides/
以下重组相关的文档建议移动到 `docs/guides/` 目录:
- `PROJECT_STRUCTURE_ANALYSIS.md` - 项目结构分析
- `QUICK_REORGANIZE.md` - 快速重组指南
- `REORGANIZATION_SUMMARY.md` - 重组总结
- `DOCUMENTATION_CLEANUP_GUIDE.md` - 文档清理指南
**建议**:这些文档可以移动到 `docs/guides/` 目录,保持根目录整洁。使用 `scripts/move_reorganization_docs.py` 脚本可以自动移动。
### ❌ 需要删除的文档(已在 docs/ 目录下)
所有以下文档在根目录的重复版本都应该删除,因为已经在 `docs/` 目录下分类存放:
#### 功能文档(15个)
- `*_FEATURE.md` 文件(已在 `docs/features/`
#### 分析报告(7个)
- `*_ANALYSIS.md``*_REPORT.md` 文件(已在 `docs/analysis/`
#### 指南文档(5个)
- `*_GUIDE.md` 文件(已在 `docs/guides/`
#### 实现文档(7个)
- 实现相关文档(已在 `docs/implementation/`
## 🚀 执行清理
### 方法1:使用自动清理脚本(推荐)
```powershell
python scripts/cleanup_duplicate_docs.py
```
这个脚本会:
- 自动检查根目录中的重复文档
- 确认 `docs/` 目录下存在对应文件
- 安全删除根目录的重复版本
- 保留必要的文档(README.md, DOCS.md 等)
### 方法2:手动清理
如果脚本执行失败(文件被占用),可以:
1. **关闭所有打开的文件**IDE、编辑器等)
2. **手动删除**根目录中的重复文档文件
3. **验证** `docs/` 目录下存在对应文件
## 📁 清理后的根目录结构
```
geo_tool/
├── README.md # ✅ 保留
├── DOCS.md # ✅ 保留(文档索引)
├── geo_tool.py # 主程序
├── requirements.txt # 依赖文件
├── .gitignore # Git配置
├── modules/ # 功能模块
├── platform_sync/ # 平台同步
└── docs/ # 所有文档(分类存放)
├── features/
├── analysis/
├── guides/ # 包含重组相关文档
└── implementation/
```
## ✅ 清理验证清单
清理完成后,请验证:
- [ ] `README.md` 仍在根目录
- [ ] `DOCS.md` 已在根目录创建
- [ ] 根目录不再有 `*_FEATURE.md` 文件
- [ ] 根目录不再有 `*_ANALYSIS.md` 文件
- [ ] 根目录不再有 `*_GUIDE.md` 文件(除了可选保留的)
- [ ] 所有文档在 `docs/` 目录下可以找到
- [ ] `DOCS.md` 中的链接都能正常访问
## 💡 最佳实践
1. **README.md** 应该简洁,包含:
- 项目简介
- 快速开始
- 主要功能概览
- 链接到 DOCS.md 获取详细文档
2. **DOCS.md** 作为文档索引,提供:
- 所有文档的分类导航
- 快速查找功能
- 清晰的文档结构说明
3. **详细文档** 放在 `docs/` 目录下分类管理,保持根目录整洁
## 🆘 遇到问题?
### 问题1:文件被占用无法删除
**解决方案**
1. 关闭所有IDE和编辑器
2. 检查是否有Python进程在运行
3. 如果仍有问题,重启计算机后再试
### 问题2:误删了重要文档
**解决方案**
1. 检查 `docs/` 目录下是否有对应文件
2. 如果有,说明只是删除了重复版本
3. 如果没有,可以从Git历史恢复
### 问题3:文档链接失效
**解决方案**
1. 运行 `python scripts/update_doc_references.py` 更新文档引用
2. 检查 `DOCS.md` 中的链接是否正确
3. 使用相对路径而不是绝对路径
+203
View File
@@ -0,0 +1,203 @@
# 最终目录结构优化指南
## ✅ 当前状态检查
### 已完成的优化
-`geo_tool.py` 已更新导入路径(使用 `modules.xxx`
-`modules/storage_example.py` 已更新导入路径
- ✅ 文档已分类移动到 `docs/` 目录
- ✅ 重组相关文档已移动到 `docs/guides/`
### 待优化的部分
- ⏳ 根目录仍有18个重复的模块文件(已在 `modules/` 中)
- ⏳ 根目录有5个工具脚本(可移动到 `scripts/`
## 🎯 优化目标
### 优化前(根目录约30+个文件)
```
geo_tool/
├── README.md
├── DOCS.md
├── geo_tool.py
├── requirements.txt
├── [18个重复模块文件] ❌
├── [5个工具脚本] ❌
└── ...
```
### 优化后(根目录约5个文件)
```
geo_tool/
├── README.md # ✅ 保留
├── DOCS.md # ✅ 保留
├── geo_tool.py # ✅ 保留(主程序)
├── requirements.txt # ✅ 保留
├── .gitignore # ✅ 保留
├── modules/ # ✅ 功能模块
├── platform_sync/ # ✅ 平台同步
├── scripts/ # ✅ 工具脚本(新增)
└── docs/ # ✅ 文档目录
```
## 📋 优化步骤(安全执行)
### 步骤1:移动工具脚本(低风险,先执行)
**操作**:将工具脚本移动到 `scripts/` 目录
**执行**
```powershell
python move_scripts.py
```
**影响**
- ✅ 低风险:工具脚本不参与主程序运行
- ✅ 可回滚:如有问题可轻松恢复
**验证**
```powershell
# 测试脚本是否仍可运行
python scripts/update_imports.py --help
```
### 步骤2:清理重复模块文件(中等风险,需谨慎)
**前提条件**
- ✅ 已确认 `geo_tool.py` 使用 `modules.xxx` 导入
- ✅ 已测试程序可以正常运行
**执行**
```powershell
python cleanup_duplicate_modules.py
```
**影响**
- ⚠️ 中等风险:删除后无法直接恢复(需从Git恢复)
- ✅ 安全:`modules/` 中已有完整版本
**验证**
```powershell
# 1. 测试导入
python -c "from modules.data_storage import DataStorage; print('✓ 导入成功')"
# 2. 测试主程序
streamlit run geo_tool.py
```
## 🔍 详细文件清单
### 需要删除的重复模块文件(18个)
这些文件在根目录和 `modules/` 目录都存在,删除根目录版本:
1. `config_optimizer.py`
2. `content_metrics.py`
3. `content_scorer.py`
4. `data_storage.py`
5. `eeat_enhancer.py`
6. `fact_density_enhancer.py`
7. `keyword_mining.py`
8. `keyword_tool.py`
9. `multimodal_prompt.py`
10. `negative_monitor.py`
11. `optimization_techniques.py`
12. `resource_recommender.py`
13. `roi_analyzer.py`
14. `schema_generator.py`
15. `semantic_expander.py`
16. `storage_example.py`
17. `technical_config_generator.py`
18. `topic_cluster.py`
19. `workflow_automation.py`
### 需要移动的工具脚本(5个)
这些脚本移动到 `scripts/` 目录:
1. `scripts/cleanup_duplicate_docs.py`
2. `scripts/move_reorganization_docs.py`
3. `scripts/reorganize_files.py`
4. `scripts/update_imports.py`
5. `scripts/update_doc_references.py`
## ⚠️ 风险评估与缓解
### 风险1:删除重复文件后程序无法运行
**概率**:低(已确认导入路径已更新)
**缓解措施**
1. 先测试:`python -c "from modules.data_storage import DataStorage"`
2. 再删除:确认测试通过后再执行删除
3. Git备份:删除前先提交,便于回滚
### 风险2:工具脚本移动后无法使用
**概率**:极低(只是位置移动)
**缓解措施**
1. 更新使用方式:`python scripts/script_name.py`
2. 测试脚本:移动后立即测试
### 风险3:遗漏某些导入路径
**概率**:低(已检查 `geo_tool.py`
**缓解措施**
1. 全局搜索:`grep -r "from data_storage import" .`
2. 运行测试:完整测试所有功能
## 📝 完整执行清单
### 准备阶段
- [ ] 确认 Git 仓库状态(建议先提交当前更改)
- [ ] 备份关键文件(可选,Git已提供版本控制)
- [ ] 阅读本指南
### 执行阶段
- [ ] 步骤1:运行 `python move_scripts.py`
- [ ] 验证:测试脚本是否仍可运行
- [ ] 步骤2:运行 `python cleanup_duplicate_modules.py`
- [ ] 验证:测试导入 `python -c "from modules.data_storage import DataStorage"`
- [ ] 验证:运行主程序 `streamlit run geo_tool.py`
### 验证阶段
- [ ] 检查根目录文件数量(应该只有5个左右)
- [ ] 测试所有主要功能模块
- [ ] 确认没有导入错误
- [ ] Git 提交优化结果
## 🎉 优化后的优势
1. **根目录极简**:从30+个文件减少到5个核心文件
2. **结构清晰**:功能模块、工具脚本、文档分类明确
3. **易于维护**:新功能添加时,只需在对应目录操作
4. **符合最佳实践**:遵循Python项目标准结构
5. **便于协作**:团队成员更容易理解项目结构
## 📚 相关文档
- `ADVANCED_OPTIMIZATION_PLAN.md` - 详细优化方案
- `cleanup_duplicate_modules.py` - 清理重复模块脚本
- `move_scripts.py` - 移动工具脚本脚本
## 🆘 遇到问题?
### 问题1:删除文件后程序无法运行
**解决方案**
1. 从Git恢复:`git checkout HEAD -- filename.py`
2. 检查导入路径:确认使用 `modules.xxx` 格式
3. 重新测试:`python -c "from modules.data_storage import DataStorage"`
### 问题2:工具脚本无法运行
**解决方案**
1. 使用完整路径:`python scripts/script_name.py`
2. 或在 `scripts/` 目录下运行:`cd scripts && python script_name.py`
### 问题3:遗漏某些文件
**解决方案**
1. 检查 `modules/` 目录:确认所有模块文件都在
2. 检查导入错误:运行程序查看具体错误信息
3. 从Git恢复:`git checkout HEAD -- .`
+282
View File
@@ -0,0 +1,282 @@
# 布局升级复杂度评估与实施指南
## 📊 复杂度评估总结
**总体复杂度:⭐⭐⭐☆☆(中等)**
### 为什么是中等复杂度?
**有利因素**
- 你已经有了基础的 CSS 样式系统
- 已经使用了 `st.tabs` 作为主导航
- 已经部分使用了 `st.container(border=True)` 卡片式设计
- 侧边栏已经有 form 结构
- 代码结构相对清晰
⚠️ **需要注意**
- 文件较大(5864行),需要系统化改动
- 有 37 个 `st.expander` 需要评估是否改为 tabs/container
- 需要保持功能逻辑不变,只改布局
---
## 🎯 推荐方案:方案2 + 方案4 混合
### 核心改动点
1. **CSS 增强**30分钟)
- 增强卡片样式
- 优化侧边栏视觉层次
- 统一间距和阴影
2. **Expander → Container/Tabs 转换**2-3小时)
- 将功能相关的多个 expander 合并为 tabs
- 将单个 expander 改为 container(border=True)
- 保持次要信息用 expander
3. **侧边栏优化**30分钟)
- 添加分组容器
- 优化视觉层次
---
## 📋 详细实施步骤
### 阶段 1:CSS 增强(低风险,30分钟)
**改动范围**:只修改 CSS 部分(第 36-170 行)
**具体改动**
```css
/* 1. 增强卡片样式 */
div[data-testid="stVerticalBlockBorderWrapper"] {
border-radius: var(--radius);
box-shadow: var(--shadow);
padding: 1.5rem !important; /* 新增:内边距 */
background: #FFFFFF !important; /* 新增:白色背景 */
margin-bottom: 1rem !important; /* 新增:卡片间距 */
}
/* 2. 优化侧边栏分组 */
section[data-testid="stSidebar"] .stForm {
background: #FFFFFF;
border-radius: 8px;
padding: 1rem;
margin-bottom: 1rem;
border: 1px solid var(--border);
}
/* 3. Expander 样式优化(保留但美化) */
.streamlit-expanderHeader {
font-weight: 500;
color: var(--text);
}
.streamlit-expanderContent {
padding-top: 0.75rem;
}
/* 4. 增强分隔线 */
hr {
border: none;
border-top: 1px solid var(--border);
margin: 1.5rem 0;
}
```
**风险**:极低,只改样式,不影响功能
---
### 阶段 2Expander 重构(中等风险,2-3小时)
#### 2.1 识别需要改动的 Expander
**改为 Tabs 的情况**(功能相关的多个选项):
- ✅ Tab1 中的"组合模式选择" + "词库管理" → 可以合并为一个 tabs
- ✅ Tab1 中的"智能关键词挖掘"已经有 tabs(保持)
- ✅ Tab3 中的多个分析 expander → 可以合并为 tabs
**改为 Container 的情况**(主要功能区域):
- ✅ Tab1 中的"组合模式选择"区域 → 已经是 container,保持
- ✅ Tab2 中的主要输入区域 → 确保用 container
- ✅ Tab3 中的优化结果展示 → 用 container
**保留 Expander 的情况**(次要/详细信息):
- ✅ "查看技巧说明" → 保持 expander
- ✅ "详细评分与改进建议" → 保持 expander
- ✅ "预览最后一篇" → 保持 expander
#### 2.2 具体改动示例
**示例 1:Tab1 中的词库管理区域**
**当前代码**(第 797 行):
```python
with st.expander("词库管理", expanded=False):
# 词库编辑和导入导出
```
**改为**
```python
with st.container(border=True):
st.markdown("### 📚 词库管理")
wordbank_tab1, wordbank_tab2 = st.tabs(["编辑词库", "导入/导出"])
with wordbank_tab1:
# 词库编辑代码
with wordbank_tab2:
# 导入导出代码
```
**示例 2Tab3 中的分析结果**
**当前代码**(多个 expander):
```python
with st.expander("📈 事实密度分析", expanded=False):
# 分析内容
with st.expander("🏗️ 结构化块分析", expanded=False):
# 分析内容
```
**改为**
```python
analysis_tabs = st.tabs(["📈 事实密度", "🏗️ 结构化块", "📝 强化详情"])
with analysis_tabs[0]:
with st.container(border=True):
# 事实密度分析内容
with analysis_tabs[1]:
with st.container(border=True):
# 结构化块分析内容
```
---
### 阶段 3:侧边栏优化(低风险,30分钟)
**当前结构**(第 563-697 行):
```python
with st.sidebar:
st.header("全局配置")
with st.form("global_config_form"):
# 所有配置项
```
**优化后**
```python
with st.sidebar:
st.header("⚙️ 全局配置")
# 分组 1LLM 配置
with st.container(border=True):
st.markdown("#### 🤖 LLM 配置")
with st.form("llm_config_form"):
# LLM 相关配置
# 分组 2:品牌信息
with st.container(border=True):
st.markdown("#### 🏢 品牌信息")
with st.form("brand_config_form"):
# 品牌相关配置
# 分组 3:其他设置
with st.container(border=True):
st.markdown("#### ⚙️ 其他设置")
# 其他配置
```
---
## ⏱️ 时间估算
| 阶段 | 任务 | 时间 | 风险 |
|------|------|------|------|
| 阶段 1 | CSS 增强 | 30分钟 | ⭐ 极低 |
| 阶段 2 | Expander 重构 | 2-3小时 | ⭐⭐ 中等 |
| 阶段 3 | 侧边栏优化 | 30分钟 | ⭐ 极低 |
| **总计** | | **3-4小时** | |
---
## 🎨 改动前后对比
### 改动前
- 大量 expander 折叠,需要点击展开
- 视觉层次不够清晰
- 卡片样式不统一
### 改动后
- 主要功能用 tabs,一目了然
- 次要信息用 expander,保持简洁
- 卡片样式统一,视觉更现代
- 侧边栏分组清晰
---
## ⚠️ 注意事项
1. **逐步实施**:先改 CSS,测试没问题再改布局
2. **保持功能**:只改布局,不改逻辑
3. **测试每个 Tab**:改完一个 tab 就测试一次
4. **保留 Expander**:不是所有 expander 都要改,次要信息保持 expander 更合适
---
## 🚀 快速开始
### 最小改动方案(1小时)
如果时间紧张,可以先做这些:
1. **只增强 CSS**30分钟)
- 添加卡片内边距和背景
- 优化侧边栏样式
2. **改 3-5 个关键 Expander**30分钟)
- Tab1 的词库管理
- Tab3 的分析结果区域
- 其他明显需要改的
这样就能看到明显改善,后续再逐步完善。
---
## 📝 检查清单
实施完成后检查:
- [ ] 所有主要功能区域都用 container(border=True) 或 tabs
- [ ] 次要信息保持用 expander
- [ ] 侧边栏有清晰的分组
- [ ] 卡片样式统一(圆角、阴影、内边距)
- [ ] 所有功能正常工作
- [ ] 响应式布局正常(不同屏幕尺寸)
---
## 💡 建议
**推荐实施顺序**
1. ✅ 先做阶段 1(CSS),立即看到效果
2. ✅ 再做阶段 3(侧边栏),改动小风险低
3. ✅ 最后做阶段 2(Expander),需要仔细测试
**如果遇到问题**
- 先回退到上一个稳定版本
- 逐个 tab 测试,不要一次性改完
- 保留原代码注释,方便对比
---
## 🎯 预期效果
实施完成后,你的工具将:
- ✨ 视觉更现代,更像产品级应用
- 🎯 功能组织更清晰,减少滚动疲劳
- 📱 用户体验更好,操作更直观
- 🎨 保持专业感,同时更美观
**复杂度总结**:中等,但可以分阶段实施,风险可控!
+185
View File
@@ -0,0 +1,185 @@
# 手动清理指南
## ⚠️ 当前状态
由于文件被占用(可能被IDE或其他程序打开),自动脚本无法执行删除/移动操作。
## 📋 需要手动完成的操作
### 步骤1:关闭所有打开的文件
**重要**:在执行清理前,请:
1. 关闭所有IDE和编辑器
2. 关闭可能占用文件的程序
3. 确保没有Python进程在运行
### 步骤2:清理重复模块文件(19个)
这些文件在根目录和 `modules/` 目录都存在,**删除根目录版本**:
**需要删除的文件**
1. `config_optimizer.py`
2. `content_metrics.py`
3. `content_scorer.py`
4. `data_storage.py`
5. `eeat_enhancer.py`
6. `fact_density_enhancer.py`
7. `keyword_mining.py`
8. `keyword_tool.py`
9. `multimodal_prompt.py`
10. `negative_monitor.py`
11. `optimization_techniques.py`
12. `resource_recommender.py`
13. `roi_analyzer.py`
14. `schema_generator.py`
15. `semantic_expander.py`
16. `storage_example.py`
17. `technical_config_generator.py`
18. `topic_cluster.py`
19. `workflow_automation.py`
**验证**:删除前确认 `modules/` 目录中有对应文件
### 步骤3:整理优化相关文件(可选)
**移动到 `docs/guides/` 的文档**
- `ADVANCED_OPTIMIZATION_PLAN.md`
- `FINAL_OPTIMIZATION_GUIDE.md`
- `REFERENCE_UPDATE_SUMMARY.md`
- `OPTIMIZATION_STATUS.md`
**移动到 `scripts/` 的脚本**
- `cleanup_duplicate_modules.py`
- `move_scripts.py`
- `update_script_references.py`
- `cleanup_optimization_files.py`
## 🚀 快速执行(PowerShell
### 方法1:使用脚本(推荐)
关闭所有文件后,运行:
```powershell
# 清理重复模块
python cleanup_duplicate_modules.py
# 输入 yes
# 整理优化文件
python cleanup_optimization_files.py
```
### 方法2:手动删除/移动
```powershell
# 删除重复模块文件
$modules = @(
"config_optimizer.py", "content_metrics.py", "content_scorer.py",
"data_storage.py", "eeat_enhancer.py", "fact_density_enhancer.py",
"keyword_mining.py", "keyword_tool.py", "multimodal_prompt.py",
"negative_monitor.py", "optimization_techniques.py", "resource_recommender.py",
"roi_analyzer.py", "schema_generator.py", "semantic_expander.py",
"storage_example.py", "technical_config_generator.py", "topic_cluster.py",
"workflow_automation.py"
)
foreach ($file in $modules) {
if (Test-Path $file) {
Remove-Item $file -Force
Write-Host "✓ 已删除: $file"
}
}
# 移动优化文档
$docs = @(
"ADVANCED_OPTIMIZATION_PLAN.md",
"FINAL_OPTIMIZATION_GUIDE.md",
"REFERENCE_UPDATE_SUMMARY.md",
"OPTIMIZATION_STATUS.md"
)
foreach ($doc in $docs) {
if (Test-Path $doc) {
Move-Item $doc -Destination "docs\guides\" -Force
Write-Host "✓ 已移动: $doc"
}
}
# 移动优化脚本
$scripts = @(
"cleanup_duplicate_modules.py",
"move_scripts.py",
"update_script_references.py",
"cleanup_optimization_files.py"
)
foreach ($script in $scripts) {
if (Test-Path $script) {
Move-Item $script -Destination "scripts\" -Force
Write-Host "✓ 已移动: $script"
}
}
```
## ✅ 验证清单
清理完成后,请验证:
- [ ] 根目录只有5个核心文件:
- README.md
- DOCS.md
- geo_tool.py
- requirements.txt
- .gitignore
- [ ] 所有模块文件在 `modules/` 目录中
- [ ] 所有工具脚本在 `scripts/` 目录中
- [ ] 所有文档在 `docs/` 子目录中
- [ ] 测试导入:`python -c "from modules.data_storage import DataStorage"`
- [ ] 测试主程序:`streamlit run geo_tool.py`
## 🎯 优化后的最终结构
```
geo_tool/
├── README.md # ✅ 项目主文档
├── DOCS.md # ✅ 文档索引
├── geo_tool.py # ✅ 主程序
├── requirements.txt # ✅ 依赖文件
├── .gitignore # ✅ Git配置
├── modules/ # ✅ 功能模块(19个文件)
├── platform_sync/ # ✅ 平台同步模块
├── scripts/ # ✅ 工具脚本(9个文件)
└── docs/ # ✅ 文档目录
├── features/ # 功能文档(15个)
├── analysis/ # 分析报告(7个)
├── guides/ # 指南文档(13个)
└── implementation/ # 实现文档(7个)
```
## 📊 优化效果
- **根目录文件**:从 50+ 个减少到 5 个(减少 90%)
- **文档分类**:34个文档按类型分类存放
- **模块组织**19个模块集中在 `modules/` 目录
- **脚本整理**:9个工具脚本集中在 `scripts/` 目录
## 🆘 遇到问题?
### 问题1:文件仍被占用
**解决方案**
1. 检查是否有Python进程:`tasklist | findstr python`
2. 关闭所有IDE和编辑器
3. 重启计算机后再试
### 问题2:删除后程序无法运行
**解决方案**
1. 从Git恢复:`git checkout HEAD -- filename.py`
2. 检查 `modules/` 目录:确认文件存在
3. 检查导入路径:确认使用 `modules.xxx` 格式
### 问题3:不确定是否安全删除
**解决方案**
1. 先备份:`git add . && git commit -m "备份:清理前"`
2. 再删除:如有问题可回滚
3. 验证:删除后立即测试程序
+157
View File
@@ -0,0 +1,157 @@
# 目录结构优化状态报告
## ✅ 已完成的优化
### 1. 文档分类 ✅
- ✅ 所有功能文档已移动到 `docs/features/`15个)
- ✅ 所有分析报告已移动到 `docs/analysis/`7个)
- ✅ 所有指南文档已移动到 `docs/guides/`9个)
- ✅ 所有实现文档已移动到 `docs/implementation/`7个)
- ✅ 重组相关文档已移动到 `docs/guides/`
### 2. 工具脚本整理 ✅
- ✅ 所有工具脚本已移动到 `scripts/` 目录(5个)
- `cleanup_duplicate_docs.py`
- `move_reorganization_docs.py`
- `reorganize_files.py`
- `update_imports.py`
- `update_doc_references.py`
### 3. 引用路径更新 ✅
-`geo_tool.py` 导入路径已更新为 `modules.xxx`
-`storage_example.py` 导入路径已更新
- ✅ 所有文档中的脚本引用已更新为 `scripts/` 前缀
- ✅ 所有文档中的模块路径引用已更新
## ⏳ 待完成的优化
### 1. 清理重复模块文件(19个)
**状态**:文件被占用,无法自动删除
**需要删除的根目录文件**(已在 `modules/` 中):
1. `config_optimizer.py`
2. `content_metrics.py`
3. `content_scorer.py`
4. `data_storage.py`
5. `eeat_enhancer.py`
6. `fact_density_enhancer.py`
7. `keyword_mining.py`
8. `keyword_tool.py`
9. `multimodal_prompt.py`
10. `negative_monitor.py`
11. `optimization_techniques.py`
12. `resource_recommender.py`
13. `roi_analyzer.py`
14. `schema_generator.py`
15. `semantic_expander.py`
16. `storage_example.py`
17. `technical_config_generator.py`
18. `topic_cluster.py`
19. `workflow_automation.py`
**解决方案**
1. 关闭所有IDE和编辑器
2. 关闭可能占用文件的程序
3. 重新运行:`python cleanup_duplicate_modules.py`
4. 或手动删除这些文件
### 2. 整理优化相关文档和脚本
**根目录的优化相关文件**(可移动到 `docs/guides/``scripts/`):
- `ADVANCED_OPTIMIZATION_PLAN.md``docs/guides/`
- `FINAL_OPTIMIZATION_GUIDE.md``docs/guides/`
- `REFERENCE_UPDATE_SUMMARY.md``docs/guides/`
- `OPTIMIZATION_STATUS.md``docs/guides/`(本文件)
- `cleanup_duplicate_modules.py``scripts/`
- `move_scripts.py``scripts/`
- `update_script_references.py``scripts/`
## 📊 当前根目录文件统计
**当前根目录文件**(约30个):
- 核心文件:5个(README.md, DOCS.md, geo_tool.py, requirements.txt, .gitignore
- 重复模块文件:19个(待删除)
- 优化相关文档:4个(可移动)
- 优化相关脚本:3个(可移动)
**优化后根目录文件**(约5个):
- README.md
- DOCS.md
- geo_tool.py
- requirements.txt
- .gitignore
## 🎯 下一步操作
### 步骤1:关闭所有打开的文件
**重要**:关闭所有IDE、编辑器和其他可能占用文件的程序
### 步骤2:清理重复模块文件
**方法A:使用脚本(推荐)**
```powershell
python cleanup_duplicate_modules.py
# 输入 yes 确认
```
**方法B:手动删除**
- 确认 `modules/` 目录中有对应文件
- 手动删除根目录的重复文件
### 步骤3:整理优化相关文件(可选)
**移动优化文档到 `docs/guides/`**
```powershell
Move-Item ADVANCED_OPTIMIZATION_PLAN.md docs\guides\ -Force
Move-Item FINAL_OPTIMIZATION_GUIDE.md docs\guides\ -Force
Move-Item REFERENCE_UPDATE_SUMMARY.md docs\guides\ -Force
Move-Item OPTIMIZATION_STATUS.md docs\guides\ -Force
```
**移动优化脚本到 `scripts/`**
```powershell
Move-Item cleanup_duplicate_modules.py scripts\ -Force
Move-Item move_scripts.py scripts\ -Force
Move-Item update_script_references.py scripts\ -Force
```
### 步骤4:验证
```powershell
# 测试导入
python -c "from modules.data_storage import DataStorage; print('✓ 导入成功')"
# 测试主程序
streamlit run geo_tool.py
```
## 📈 优化进度
- [x] 文档分类整理(100%
- [x] 工具脚本整理(100%
- [x] 引用路径更新(100%
- [ ] 清理重复模块文件(0% - 文件被占用)
- [ ] 整理优化相关文件(0% - 可选)
## 🎉 优化效果
### 优化前
- 根目录:50+ 个文件混在一起
- 文档:34个文档文件在根目录
- 模块:18个模块文件在根目录
- 脚本:5个工具脚本在根目录
### 优化后(完成所有步骤后)
- 根目录:5个核心文件
- 文档:分类存放在 `docs/` 子目录
- 模块:集中在 `modules/` 目录
- 脚本:集中在 `scripts/` 目录
**文件减少率**:从 50+ 个减少到 5 个(减少 90%)
## 📚 相关文档
- `docs/guides/FINAL_OPTIMIZATION_GUIDE.md` - 完整优化指南
- `docs/guides/ADVANCED_OPTIMIZATION_PLAN.md` - 详细优化方案
- `docs/guides/REFERENCE_UPDATE_SUMMARY.md` - 引用路径更新总结
+94
View File
@@ -0,0 +1,94 @@
# 平台扩展安装说明
## 已支持的平台
### 基础平台(已包含依赖)
- DeepSeek
- OpenAI (GPT)
- Tongyi (通义千问)
- Groq
- Moonshot (Kimi)
### 新增平台(需要额外安装)
#### 1. 豆包(字节跳动)
**安装命令:**
```bash
pip install 'volcengine-python-sdk[ark]'
```
**API Key 格式:**
```
access_key:secret_key:endpoint_id
```
用冒号分隔三个值:
- `access_key`: 火山引擎 Access Key
- `secret_key`: 火山引擎 Secret Key
- `endpoint_id`: 接入点名称(Endpoint ID
**获取方式:**
1. 访问 [火山引擎官网](https://www.volcengine.com/)
2. 注册账号并完成实名认证
3. 在控制台获取 Access Key 和 Secret Key
4. 创建模型接入点,获取 Endpoint ID
**使用示例:**
在侧边栏"生成&优化 LLM"或"验证用LLM"中选择"豆包(字节跳动)",输入格式化的 API Key。
---
#### 2. 文心一言(百度)
**安装命令:**
```bash
pip install qianfan
```
**API Key 格式:**
```
app_key:app_secret
```
用冒号分隔两个值:
- `app_key`: 百度智能云 App Key
- `app_secret`: 百度智能云 App Secret
**获取方式:**
1. 访问 [百度智能云千帆平台](https://cloud.baidu.com/product/qianfan.html)
2. 注册账号并完成认证
3. 创建应用,获取 App Key 和 App Secret
**使用示例:**
在侧边栏"生成&优化 LLM"或"验证用LLM"中选择"文心一言(百度)",输入格式化的 API Key。
---
## 快速安装所有平台
如果需要使用所有平台,可以运行:
```bash
pip install 'volcengine-python-sdk[ark]' qianfan
```
---
## 注意事项
1. **API Key 格式**:豆包和文心一言的 API Key 需要使用冒号分隔多个值
2. **依赖冲突**:某些包可能有版本冲突,如遇到问题请单独安装
3. **可选安装**:这些平台是可选的,如果不使用可以不安装,不影响其他功能
---
## 故障排除
### 豆包安装失败
- 确保 Python 版本 >= 3.7
- Windows 系统可能需要启用长路径支持
- 尝试:`pip install 'volcengine-python-sdk[ark]' -U`
### 文心一言初始化失败
- 确保已安装 `qianfan`
- 检查 API Key 格式是否正确(app_key:app_secret
- 确认环境变量或参数中的 AK/SK 是否正确
+231
View File
@@ -0,0 +1,231 @@
# 项目目录结构分析报告
## 📊 当前项目结构分析
### 文件统计
**Python 文件(.py**24个
- 主程序:1个(geo_tool.py
- 功能模块:18个
- 平台同步模块:3个(在platform_sync/目录)
- 示例/工具:2个
**文档文件(.md**34个
- 功能文档(*_FEATURE.md):15个
- 分析报告(*_ANALYSIS.md, *_REPORT.md):7个
- 指南文档(*_GUIDE.md):5个
- 实现文档:7个
**配置文件**3个
- requirements.txt
- .gitignore
- .streamlit/config.toml
### 目录结构
```
geo_tool/
├── 根目录文件(50+个文件混在一起)
│ ├── Python模块文件(18个)
│ ├── 文档文件(34个)
│ ├── 配置文件(3个)
│ └── 主程序(1个)
└── platform_sync/(已有子目录)
├── __init__.py
├── base_publisher.py
├── github_publisher.py
└── copy_manager.py
```
## 🔍 文件引用关系分析
### Python 文件导入关系
**geo_tool.py** 导入的模块(18个):
```python
from data_storage import DataStorage
from keyword_tool import KeywordTool
from content_scorer import ContentScorer
from eeat_enhancer import EEATEnhancer
from semantic_expander import SemanticExpander
from fact_density_enhancer import FactDensityEnhancer
from schema_generator import SchemaGenerator
from topic_cluster import TopicCluster
from multimodal_prompt import MultimodalPromptGenerator
from roi_analyzer import ROIAnalyzer
from workflow_automation import WorkflowManager, WorkflowStep
from keyword_mining import KeywordMining
from optimization_techniques import OptimizationTechniqueManager
from content_metrics import ContentMetricsAnalyzer
from technical_config_generator import TechnicalConfigGenerator
from negative_monitor import NegativeMonitor
from resource_recommender import ResourceRecommender
```
**platform_sync** 模块:
- 使用相对导入,已有包结构
### 文档引用关系
**README.md** 引用的文档:
- `INTEGRATION_NOTES.md`
- `STORAGE_GUIDE.md`
- `PLATFORM_SETUP.md`
- `IMPLEMENTATION_SUMMARY.md`
- `PLATFORM_SYNC_IMPLEMENTATION.md`
- 15个 `*_FEATURE.md` 文件
**功能文档** 之间的引用:
- 各功能文档相互引用
- 引用实现模块(.py文件)
- 引用其他分析文档
## 🎯 优化建议
### 1. 目录结构优化
**建议结构**
```
geo_tool/
├── README.md
├── requirements.txt
├── .gitignore
├── .streamlit/
├── geo_tool.py
├── modules/ # 新增:功能模块目录
│ ├── __init__.py
│ └── [18个模块文件]
├── platform_sync/ # 已有
└── docs/ # 新增:文档目录
├── features/ # 功能文档
├── analysis/ # 分析报告
├── guides/ # 指南文档
└── implementation/ # 实现文档
```
### 2. 导入路径更新
**需要更新的导入**
- `geo_tool.py`:所有模块导入添加 `modules.` 前缀
- `storage_example.py`:更新 `data_storage` 导入
### 3. 文档路径更新
**需要更新的文档引用**
- 所有 `.md` 文件中的文档路径引用
- README.md 中的文档链接
## 📋 实施计划
### 阶段1:准备(已完成)
- ✅ 创建优化方案文档
- ✅ 创建目录结构
- ✅ 创建更新脚本
### 阶段2:文件移动(待执行)
1. 关闭所有打开的文件(IDE、编辑器等)
2. 运行文件移动脚本或手动移动
3. 验证文件移动成功
### 阶段3:路径更新(待执行)
1. 运行 `scripts/update_imports.py` 更新Python导入
2. 运行 `scripts/update_doc_references.py` 更新文档引用
3. 手动检查关键文件
### 阶段4:验证(待执行)
1. 运行 `python geo_tool.py` 测试导入
2. 检查文档链接是否正常
3. 验证所有功能是否正常
## 📝 详细文件清单
### 需要移动到 modules/ 的文件(18个)
1. `data_storage.py`
2. `keyword_tool.py`
3. `content_scorer.py`
4. `eeat_enhancer.py`
5. `semantic_expander.py`
6. `fact_density_enhancer.py`
7. `schema_generator.py`
8. `topic_cluster.py`
9. `multimodal_prompt.py`
10. `roi_analyzer.py`
11. `workflow_automation.py`
12. `keyword_mining.py`
13. `optimization_techniques.py`
14. `content_metrics.py`
15. `technical_config_generator.py`
16. `negative_monitor.py`
17. `resource_recommender.py`
18. `config_optimizer.py`
19. `storage_example.py`(可选)
### 需要移动到 docs/features/ 的文件(15个)
1. `CONFIG_OPTIMIZER_FEATURE.md`
2. `CONTENT_METRICS_FEATURE.md`
3. `CONTENT_SCORER_FEATURE.md`
4. `EEAT_FEATURE.md`
5. `FACT_DENSITY_FEATURE.md`
6. `JSON_LD_SCHEMA_FEATURE.md`
7. `KEYWORD_MINING_FEATURE.md`
8. `MULTIMODAL_FEATURE.md`
9. `NEGATIVE_MONITOR_FEATURE.md`
10. `OPTIMIZATION_TECHNIQUES_FEATURE.md`
11. `RESOURCE_RECOMMENDER_FEATURE.md`
12. `ROI_ANALYSIS_FEATURE.md`
13. `SEMANTIC_EXPANSION_FEATURE.md`
14. `TECHNICAL_CONFIG_FEATURE.md`
15. `TOPIC_CLUSTER_FEATURE.md`
16. `WORKFLOW_AUTOMATION_FEATURE.md`
### 需要移动到 docs/analysis/ 的文件(7个)
1. `ANALYSIS_ACCURACY_REPORT.md`
2. `CODE_DOCUMENTATION_ANALYSIS.md`
3. `DOCUMENTATION_REVERSE_VERIFICATION.md`
4. `FEATURE_ANALYSIS.md`
5. `FEATURE_PRIORITY_ANALYSIS.md`
6. `FUNCTION_VERIFICATION_REPORT.md`
7. `GEO_COMPLIANCE_ANALYSIS.md`
### 需要移动到 docs/guides/ 的文件(5个)
1. `QUICK_START_GUIDE.md`
2. `STORAGE_GUIDE.md`
3. `PLATFORM_SETUP.md`
4. `LAYOUT_UPGRADE_GUIDE.md`
5. `DECISION_GUIDE.md`
### 需要移动到 docs/implementation/ 的文件(7个)
1. `IMPLEMENTATION_SUMMARY.md`
2. `PLATFORM_SYNC_ANALYSIS.md`
3. `PLATFORM_SYNC_IMPLEMENTATION.md`
4. `PLATFORM_SYNC_TEST.md`
5. `INTEGRATION_NOTES.md`
6. `FEATURES_COMPLETE_LIST.md`
7. `ADVANCED_FEATURES.md`
## ✅ 优化后的优势
1. **清晰的目录结构**:文件按功能分类,易于查找和管理
2. **模块化组织**:功能模块集中管理,便于维护和扩展
3. **文档分类清晰**:功能文档、分析报告、指南文档分开管理
4. **符合最佳实践**:遵循Python项目标准目录结构
5. **便于协作**:团队成员更容易理解项目结构
## 🚨 注意事项
1. **文件占用**:移动文件前,确保所有文件未被IDE或其他程序打开
2. **路径更新**:移动文件后,必须运行更新脚本更新所有引用路径
3. **测试验证**:完成移动和更新后,务必测试程序是否正常运行
4. **Git提交**:建议分步骤提交,便于回滚和追踪变更
## 📚 相关文档
- `docs/DIRECTORY_STRUCTURE_OPTIMIZATION.md` - 详细的优化方案和实施步骤
- `scripts/update_imports.py` - 自动更新Python导入路径的脚本
- `scripts/update_doc_references.py` - 自动更新文档路径引用的脚本
+139
View File
@@ -0,0 +1,139 @@
# 快速重组项目目录结构
## ⚡ 快速执行步骤
### 步骤1:关闭所有打开的文件
**重要**:在移动文件之前,请关闭所有在IDE或编辑器中打开的文件,否则会出现"文件被占用"的错误。
### 步骤2:执行文件移动
#### 方法A:使用PowerShell脚本(推荐)
在项目根目录打开PowerShell,执行:
```powershell
# 移动功能模块
$modules = @(
"data_storage.py", "keyword_tool.py", "content_scorer.py", "eeat_enhancer.py",
"semantic_expander.py", "fact_density_enhancer.py", "schema_generator.py",
"topic_cluster.py", "multimodal_prompt.py", "roi_analyzer.py",
"workflow_automation.py", "keyword_mining.py", "optimization_techniques.py",
"content_metrics.py", "technical_config_generator.py", "negative_monitor.py",
"resource_recommender.py", "config_optimizer.py", "storage_example.py"
)
foreach ($file in $modules) {
if (Test-Path $file) {
Move-Item $file -Destination "modules\" -Force -ErrorAction SilentlyContinue
Write-Host "$file"
}
}
# 移动功能文档
Get-ChildItem -Filter "*_FEATURE.md" | ForEach-Object {
Move-Item $_.FullName -Destination "docs\features\" -Force -ErrorAction SilentlyContinue
Write-Host "$($_.Name)"
}
# 移动分析报告
$analysis = @(
"ANALYSIS_ACCURACY_REPORT.md", "CODE_DOCUMENTATION_ANALYSIS.md",
"DOCUMENTATION_REVERSE_VERIFICATION.md", "FEATURE_ANALYSIS.md",
"FEATURE_PRIORITY_ANALYSIS.md", "FUNCTION_VERIFICATION_REPORT.md",
"GEO_COMPLIANCE_ANALYSIS.md"
)
foreach ($file in $analysis) {
if (Test-Path $file) {
Move-Item $file -Destination "docs\analysis\" -Force -ErrorAction SilentlyContinue
Write-Host "$file"
}
}
# 移动指南文档
$guides = @(
"QUICK_START_GUIDE.md", "STORAGE_GUIDE.md", "PLATFORM_SETUP.md",
"LAYOUT_UPGRADE_GUIDE.md", "DECISION_GUIDE.md"
)
foreach ($file in $guides) {
if (Test-Path $file) {
Move-Item $file -Destination "docs\guides\" -Force -ErrorAction SilentlyContinue
Write-Host "$file"
}
}
# 移动实现文档
$implementation = @(
"IMPLEMENTATION_SUMMARY.md", "PLATFORM_SYNC_ANALYSIS.md",
"PLATFORM_SYNC_IMPLEMENTATION.md", "PLATFORM_SYNC_TEST.md",
"INTEGRATION_NOTES.md", "FEATURES_COMPLETE_LIST.md", "ADVANCED_FEATURES.md"
)
foreach ($file in $implementation) {
if (Test-Path $file) {
Move-Item $file -Destination "docs\implementation\" -Force -ErrorAction SilentlyContinue
Write-Host "$file"
}
}
Write-Host "`n✅ 文件移动完成!"
```
#### 方法B:手动移动(如果脚本失败)
如果PowerShell脚本因为文件被占用而失败,请:
1. 关闭所有IDE和编辑器
2. 手动将文件拖拽到对应目录
3. 参考 `PROJECT_STRUCTURE_ANALYSIS.md` 中的文件清单
### 步骤3:更新导入路径
```powershell
python scripts/update_imports.py
```
### 步骤4:更新文档引用
```powershell
python scripts/update_doc_references.py
```
### 步骤5:验证
```powershell
# 测试导入是否正常
python -c "from modules.data_storage import DataStorage; print('✓ 导入成功')"
```
## 📋 完整执行清单
- [ ] 关闭所有打开的文件(IDE、编辑器等)
- [ ] 执行文件移动(PowerShell脚本或手动)
- [ ] 运行 `python scripts/update_imports.py`
- [ ] 运行 `python scripts/update_doc_references.py`
- [ ] 测试导入:`python -c "from modules.data_storage import DataStorage"`
- [ ] 运行主程序:`streamlit run geo_tool.py`
- [ ] 检查文档链接是否正常
## 🆘 遇到问题?
### 问题1:文件被占用
**解决方案**
1. 关闭所有IDE和编辑器
2. 检查是否有Python进程在运行:`tasklist | findstr python`
3. 如果仍有问题,重启计算机后再试
### 问题2:导入错误
**解决方案**
1. 确认文件已移动到 `modules/` 目录
2. 确认 `modules/__init__.py` 存在
3. 检查 `geo_tool.py` 中的导入路径是否正确
### 问题3:文档链接失效
**解决方案**
1. 运行 `python scripts/update_doc_references.py`
2. 手动检查 `README.md` 中的链接
3. 使用相对路径而不是绝对路径
## 📚 相关文档
- `PROJECT_STRUCTURE_ANALYSIS.md` - 详细的项目结构分析
- `docs/DIRECTORY_STRUCTURE_OPTIMIZATION.md` - 完整的优化方案
+355
View File
@@ -0,0 +1,355 @@
# 快速开始指南:实现GitHub发布功能
> 这是最简单的实现示例,可以作为其他平台的基础模板
## 🎯 目标
实现GitHub平台的文章自动发布功能,验证整体架构可行性。
## 📦 步骤1:安装依赖
```bash
pip install httpx pyperclip
```
## 📝 步骤2:扩展数据库
`modules/data_storage.py``_init_sqlite` 方法中添加:
```python
# 平台账号表
cursor.execute("""
CREATE TABLE IF NOT EXISTS platform_accounts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
platform TEXT NOT NULL,
account_type TEXT NOT NULL,
account_name TEXT,
api_key TEXT,
config_json TEXT,
is_active INTEGER DEFAULT 1,
brand TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
# 发布记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS publish_records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
article_id INTEGER,
platform TEXT NOT NULL,
publish_method TEXT NOT NULL,
publish_status TEXT NOT NULL,
publish_url TEXT,
publish_id TEXT,
error_message TEXT,
published_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
```
## 💻 步骤3:创建GitHub发布器
创建文件 `platform_sync/github_publisher.py`
```python
"""
GitHub发布器 - 最简单的实现示例
"""
import base64
import httpx
from typing import Dict, Any, Optional
class GitHubPublisher:
"""GitHub发布器"""
def __init__(self, api_key: str, repo_owner: str, repo_name: str):
self.api_key = api_key
self.repo_owner = repo_owner
self.repo_name = repo_name
self.base_url = "https://api.github.com"
self.headers = {
"Authorization": f"token {api_key}",
"Accept": "application/vnd.github.v3+json"
}
def publish(self, content: str, title: str, file_path: Optional[str] = None) -> Dict[str, Any]:
"""
发布内容到GitHub
Args:
content: Markdown内容
title: 文章标题
file_path: 文件路径(可选)
Returns:
{
'success': bool,
'publish_url': str,
'publish_id': str,
'error': str
}
"""
try:
# 生成文件路径
if not file_path:
safe_title = title.replace(' ', '_').replace('/', '_')
file_path = f"content/{safe_title}.md"
# 编码内容
content_bytes = content.encode('utf-8')
content_base64 = base64.b64encode(content_bytes).decode('utf-8')
# API URL
url = f"{self.base_url}/repos/{self.repo_owner}/{self.repo_name}/contents/{file_path}"
# 检查文件是否存在
response = httpx.get(url, headers=self.headers)
sha = None
if response.status_code == 200:
sha = response.json().get('sha')
# 准备数据
data = {
"message": f"Publish: {title}",
"content": content_base64,
"branch": "main"
}
if sha:
data["sha"] = sha
# 创建或更新文件
response = httpx.put(url, json=data, headers=self.headers)
if response.status_code in [200, 201]:
result = response.json()
html_url = result.get('content', {}).get('html_url', '')
return {
'success': True,
'publish_url': html_url,
'publish_id': result.get('content', {}).get('sha', ''),
'error': None
}
else:
return {
'success': False,
'publish_url': '',
'publish_id': '',
'error': f"GitHub API错误: {response.text}"
}
except Exception as e:
return {
'success': False,
'publish_url': '',
'publish_id': '',
'error': str(e)
}
def validate_account(self) -> bool:
"""验证GitHub账号"""
try:
response = httpx.get(f"{self.base_url}/user", headers=self.headers)
return response.status_code == 200
except:
return False
```
## 🔧 步骤4:扩展DataStorage
`modules/data_storage.py``DataStorage` 类中添加:
```python
def save_platform_account(self, platform: str, account_config: Dict[str, Any], brand: str):
"""保存平台账号"""
if self.storage_type == "sqlite":
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("""
INSERT OR REPLACE INTO platform_accounts
(platform, account_type, account_name, api_key, config_json, brand, updated_at)
VALUES (?, ?, ?, ?, ?, ?, ?)
""", (
platform,
account_config.get('account_type', 'api'),
account_config.get('account_name', ''),
account_config.get('api_key', ''),
json.dumps(account_config.get('config', {}), ensure_ascii=False),
brand,
datetime.now().isoformat()
))
conn.commit()
conn.close()
def get_platform_account(self, platform: str, brand: str) -> Optional[Dict[str, Any]]:
"""获取平台账号"""
if self.storage_type == "sqlite":
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("""
SELECT * FROM platform_accounts
WHERE platform = ? AND brand = ? AND is_active = 1
""", (platform, brand))
row = cursor.fetchone()
conn.close()
if row:
return {
'api_key': row[4],
'config': json.loads(row[5] or '{}')
}
return None
def save_publish_record(self, article_id: int, platform: str, publish_method: str,
publish_status: str, publish_url: str = '', publish_id: str = '',
error_message: str = ''):
"""保存发布记录"""
if self.storage_type == "sqlite":
conn = sqlite3.connect(self.db_path)
cursor = conn.cursor()
cursor.execute("""
INSERT INTO publish_records
(article_id, platform, publish_method, publish_status, publish_url,
publish_id, error_message, published_at)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
""", (
article_id, platform, publish_method, publish_status,
publish_url, publish_id, error_message, datetime.now().isoformat()
))
conn.commit()
conn.close()
```
## 🎨 步骤5:添加UI(在geo_tool.py中)
`modules/geo_tool.py` 中添加新的Tab或功能:
```python
# 在Tab定义中添加
tabs = st.tabs([
"1 关键词蒸馏",
"2 内容生成",
"3 内容优化",
"4 AI验证",
"5 历史记录",
"6 平台同步" # 新增
])
with tabs[5]: # 平台同步Tab
st.header("📤 平台文章同步")
# GitHub账号配置
with st.expander("🔐 GitHub账号配置", expanded=True):
github_api_key = st.text_input("GitHub Personal Access Token", type="password")
github_repo_owner = st.text_input("仓库所有者(用户名)")
github_repo_name = st.text_input("仓库名称")
if st.button("保存GitHub配置"):
if github_api_key and github_repo_owner and github_repo_name:
storage.save_platform_account(
platform="GitHub",
account_config={
'account_type': 'api',
'api_key': github_api_key,
'config': {
'repo_owner': github_repo_owner,
'repo_name': github_repo_name
}
},
brand=brand
)
st.success("GitHub配置已保存!")
else:
st.error("请填写完整信息")
# 发布功能
st.subheader("📝 发布到GitHub")
# 选择文章
articles = storage.get_articles(brand=brand)
if articles:
article_options = {f"{a['keyword']} - {a['platform']}": a['id'] for a in articles}
selected_article_key = st.selectbox("选择要发布的文章", list(article_options.keys()))
selected_article_id = article_options[selected_article_key]
if st.button("🚀 发布到GitHub", type="primary"):
# 获取账号配置
account_config = storage.get_platform_account("GitHub", brand)
if not account_config:
st.error("请先配置GitHub账号")
else:
# 获取文章
article = next((a for a in articles if a['id'] == selected_article_id), None)
if article:
# 创建发布器
from platform_sync.github_publisher import GitHubPublisher
publisher = GitHubPublisher(
api_key=account_config['api_key'],
repo_owner=account_config['config']['repo_owner'],
repo_name=account_config['config']['repo_name']
)
# 发布
with st.spinner("正在发布到GitHub..."):
result = publisher.publish(
content=article['content'],
title=article['keyword']
)
# 保存发布记录
storage.save_publish_record(
article_id=selected_article_id,
platform="GitHub",
publish_method="api",
publish_status="success" if result['success'] else "failed",
publish_url=result.get('publish_url', ''),
publish_id=result.get('publish_id', ''),
error_message=result.get('error', '')
)
# 显示结果
if result['success']:
st.success(f"✅ 发布成功!")
st.markdown(f"**发布链接**: {result['publish_url']}")
else:
st.error(f"❌ 发布失败: {result.get('error', '未知错误')}")
else:
st.info("请先生成文章")
# 发布记录
st.subheader("📊 发布记录")
# 这里可以显示发布历史记录
```
## ✅ 步骤6:测试
1. **获取GitHub Token**
- 访问 https://github.com/settings/tokens
- 创建新的 Personal Access Token
- 选择 `repo` 权限
2. **运行测试**
```bash
streamlit run geo_tool.py
```
3. **测试流程**
- 配置GitHub账号
- 生成一篇文章
- 发布到GitHub
- 检查GitHub仓库是否成功创建文件
## 🎉 完成!
如果GitHub发布功能正常工作,说明架构是正确的。接下来可以:
1. 按照相同模式实现其他7个API平台
2. 实现一键复制功能
3. 添加批量发布功能
## 📚 参考
- [GitHub API文档](https://docs.github.com/en/rest)
- [完整实现指南](./PLATFORM_SYNC_IMPLEMENTATION.md)
+122
View File
@@ -0,0 +1,122 @@
# 引用路径更新总结
## ✅ 已完成的更新
### 1. 工具脚本引用更新
**更新的文档**6个):
-`FINAL_OPTIMIZATION_GUIDE.md`
-`ADVANCED_OPTIMIZATION_PLAN.md`
-`docs/guides/DOCUMENTATION_CLEANUP_GUIDE.md`
-`docs/guides/PROJECT_STRUCTURE_ANALYSIS.md`
-`docs/guides/QUICK_REORGANIZE.md`
-`docs/guides/REORGANIZATION_SUMMARY.md`
**更新内容**
- `python update_imports.py``python scripts/update_imports.py`
- `python cleanup_duplicate_docs.py``python scripts/cleanup_duplicate_docs.py`
- `update_imports.py``scripts/update_imports.py`
- 等等...
### 2. 模块导入路径更新
**已更新的文件**
-`geo_tool.py` - 所有导入已更新为 `from modules.xxx import`
-`modules/storage_example.py` - 导入已更新为 `from modules.data_storage import`
-`storage_example.py` (根目录) - 导入已更新为 `from modules.data_storage import`
## 📋 引用路径对照表
### 工具脚本路径
| 旧路径 | 新路径 |
|--------|--------|
| `python update_imports.py` | `python scripts/update_imports.py` |
| `python update_doc_references.py` | `python scripts/update_doc_references.py` |
| `python cleanup_duplicate_docs.py` | `python scripts/cleanup_duplicate_docs.py` |
| `python move_reorganization_docs.py` | `python scripts/move_reorganization_docs.py` |
| `python reorganize_files.py` | `python scripts/reorganize_files.py` |
### 模块导入路径
| 旧导入 | 新导入 |
|--------|--------|
| `from data_storage import DataStorage` | `from modules.data_storage import DataStorage` |
| `from keyword_tool import KeywordTool` | `from modules.keyword_tool import KeywordTool` |
| `from content_scorer import ContentScorer` | `from modules.content_scorer import ContentScorer` |
| ... | ... (所有模块都已更新) |
## ✅ 验证清单
### Python 导入验证
- [x] `geo_tool.py` - 所有导入使用 `modules.xxx`
- [x] `modules/storage_example.py` - 导入已更新
- [x] `storage_example.py` (根目录) - 导入已更新
- [x] 测试导入:`python -c "from modules.data_storage import DataStorage"`
### 文档引用验证
- [x] 所有文档中的工具脚本路径已更新为 `scripts/` 前缀
- [x] 所有文档中的模块路径引用已更新(通过之前的 `update_doc_references.py`
### 脚本路径验证
- [ ] 移动脚本后,测试脚本是否仍可运行
- [ ] 确认所有文档中的脚本路径正确
## 🎯 下一步操作
### 执行优化前
1. **确认所有引用已更新**
- Python 导入路径:已更新
- 文档引用路径:已更新
2. **执行文件移动**
```powershell
# 步骤1:移动工具脚本
python move_scripts.py
# 步骤2:清理重复模块(在确认导入路径正确后)
python cleanup_duplicate_modules.py
```
3. **验证**
```powershell
# 测试脚本
python scripts/update_imports.py
# 测试主程序
streamlit run geo_tool.py
```
## 📝 注意事项
1. **工具脚本移动后**
- 使用方式:`python scripts/script_name.py`
- 或在 `scripts/` 目录下运行:`cd scripts && python script_name.py`
2. **模块文件删除后**
- 确保 `modules/` 目录中有完整版本
- 确保所有导入使用 `modules.xxx` 格式
- 如有问题,可从 Git 恢复
3. **文档引用**
- 所有文档中的路径引用已自动更新
- 如有遗漏,可手动检查并更新
## 🆘 如果遇到问题
### 问题1:脚本找不到
**解决方案**
- 使用完整路径:`python scripts/script_name.py`
- 或进入目录:`cd scripts && python script_name.py`
### 问题2:导入错误
**解决方案**
- 检查导入路径:确认使用 `from modules.xxx import`
- 检查 `modules/__init__.py` 是否存在
- 从 Git 恢复文件:`git checkout HEAD -- filename.py`
### 问题3:文档链接失效
**解决方案**
- 运行 `python scripts/update_doc_references.py` 更新文档引用
- 运行 `python scripts/update_script_references.py` 更新脚本引用
+243
View File
@@ -0,0 +1,243 @@
# 项目目录结构优化总结
## ✅ 已完成的工作
### 1. 目录结构创建
- ✅ 创建了 `docs/` 目录及其子目录:
- `docs/features/` - 功能文档
- `docs/analysis/` - 分析报告
- `docs/guides/` - 指南文档
- `docs/implementation/` - 实现文档
- ✅ 创建了 `modules/` 目录
- ✅ 创建了 `modules/__init__.py`
### 2. 分析文档创建
-`PROJECT_STRUCTURE_ANALYSIS.md` - 完整的项目结构分析
-`docs/DIRECTORY_STRUCTURE_OPTIMIZATION.md` - 详细的优化方案
-`QUICK_REORGANIZE.md` - 快速执行指南
### 3. 自动化脚本创建
-`scripts/update_imports.py` - 自动更新Python导入路径
-`scripts/update_doc_references.py` - 自动更新文档路径引用
-`scripts/reorganize_files.py` - 文件移动脚本(备用)
## 📋 待执行的任务
### 任务1:清理重复文件
**当前状态**:部分文件已移动到 `modules/`,但根目录仍有重复文件。
**需要操作**
1. 检查根目录和 `modules/` 目录中的重复文件
2. 删除根目录中的重复文件(保留 `modules/` 中的版本)
**重复文件列表**(需要确认):
- `config_optimizer.py`
- `content_metrics.py`
- `content_scorer.py`
- `data_storage.py`
- `eeat_enhancer.py`
- `fact_density_enhancer.py`
- `keyword_mining.py`
- `keyword_tool.py`
- `multimodal_prompt.py`
- `negative_monitor.py`
- `optimization_techniques.py`
- `resource_recommender.py`
- `roi_analyzer.py`
- `schema_generator.py`
- `semantic_expander.py`
- `storage_example.py`
- `technical_config_generator.py`
- `topic_cluster.py`
- `workflow_automation.py`
### 任务2:移动文档文件
**需要移动到 `docs/features/` 的文件**15个):
- `CONFIG_OPTIMIZER_FEATURE.md`
- `CONTENT_METRICS_FEATURE.md`
- `CONTENT_SCORER_FEATURE.md`
- `EEAT_FEATURE.md`
- `FACT_DENSITY_FEATURE.md`
- `JSON_LD_SCHEMA_FEATURE.md`
- `KEYWORD_MINING_FEATURE.md`
- `MULTIMODAL_FEATURE.md`
- `NEGATIVE_MONITOR_FEATURE.md`
- `OPTIMIZATION_TECHNIQUES_FEATURE.md`
- `RESOURCE_RECOMMENDER_FEATURE.md`
- `ROI_ANALYSIS_FEATURE.md`
- `SEMANTIC_EXPANSION_FEATURE.md`
- `TECHNICAL_CONFIG_FEATURE.md`
- `TOPIC_CLUSTER_FEATURE.md`
- `WORKFLOW_AUTOMATION_FEATURE.md`
**需要移动到 `docs/analysis/` 的文件**7个):
- `ANALYSIS_ACCURACY_REPORT.md`
- `CODE_DOCUMENTATION_ANALYSIS.md`
- `DOCUMENTATION_REVERSE_VERIFICATION.md`
- `FEATURE_ANALYSIS.md`
- `FEATURE_PRIORITY_ANALYSIS.md`
- `FUNCTION_VERIFICATION_REPORT.md`
- `GEO_COMPLIANCE_ANALYSIS.md`
**需要移动到 `docs/guides/` 的文件**5个):
- `QUICK_START_GUIDE.md`
- `STORAGE_GUIDE.md`
- `PLATFORM_SETUP.md`
- `LAYOUT_UPGRADE_GUIDE.md`
- `DECISION_GUIDE.md`
**需要移动到 `docs/implementation/` 的文件**7个):
- `IMPLEMENTATION_SUMMARY.md`
- `PLATFORM_SYNC_ANALYSIS.md`
- `PLATFORM_SYNC_IMPLEMENTATION.md`
- `PLATFORM_SYNC_TEST.md`
- `INTEGRATION_NOTES.md`
- `FEATURES_COMPLETE_LIST.md`
- `ADVANCED_FEATURES.md`
### 任务3:更新导入路径
**需要更新的文件**
1. `geo_tool.py` - 更新所有模块导入
2. `modules/storage_example.py` - 更新 `data_storage` 导入
**执行命令**
```powershell
python scripts/update_imports.py
```
### 任务4:更新文档引用
**需要更新的文件**
- `README.md` - 更新所有文档路径引用
- 所有 `.md` 文件中的文档和模块路径引用
**执行命令**
```powershell
python scripts/update_doc_references.py
```
## 🎯 优化后的目录结构
```
geo_tool/
├── README.md # 项目主文档
├── requirements.txt # 依赖文件
├── .gitignore # Git配置
├── .streamlit/ # Streamlit配置
│ └── config.toml
├── geo_tool.py # 主程序
├── modules/ # 功能模块(18个文件)
│ ├── __init__.py
│ ├── data_storage.py
│ ├── keyword_tool.py
│ ├── content_scorer.py
│ ├── eeat_enhancer.py
│ ├── semantic_expander.py
│ ├── fact_density_enhancer.py
│ ├── schema_generator.py
│ ├── topic_cluster.py
│ ├── multimodal_prompt.py
│ ├── roi_analyzer.py
│ ├── workflow_automation.py
│ ├── keyword_mining.py
│ ├── optimization_techniques.py
│ ├── content_metrics.py
│ ├── technical_config_generator.py
│ ├── negative_monitor.py
│ ├── resource_recommender.py
│ ├── config_optimizer.py
│ └── storage_example.py
├── platform_sync/ # 平台同步模块
│ ├── __init__.py
│ ├── base_publisher.py
│ ├── github_publisher.py
│ └── copy_manager.py
└── docs/ # 文档目录
├── features/ # 功能文档(15个)
├── analysis/ # 分析报告(7个)
├── guides/ # 指南文档(5个)
└── implementation/ # 实现文档(7个)
```
## 📝 执行步骤
### 快速执行(推荐)
1. **关闭所有打开的文件**IDE、编辑器等)
2. **执行文件移动**
```powershell
# 参考 QUICK_REORGANIZE.md 中的PowerShell脚本
```
3. **更新导入路径**
```powershell
python scripts/update_imports.py
```
4. **更新文档引用**
```powershell
python scripts/update_doc_references.py
```
5. **验证**
```powershell
python -c "from modules.data_storage import DataStorage; print('✓ 导入成功')"
streamlit run geo_tool.py
```
## 🔍 文件引用关系
### Python 导入关系
**geo_tool.py** 需要更新的导入(18个):
```python
# 旧导入
from data_storage import DataStorage
from keyword_tool import KeywordTool
# ...
# 新导入
from modules.data_storage import DataStorage
from modules.keyword_tool import KeywordTool
# ...
```
### 文档引用关系
**README.md** 中的文档路径需要更新:
- `xxx_FEATURE.md` → `docs/features/xxx_FEATURE.md`
- `xxx_GUIDE.md` → `docs/guides/xxx_GUIDE.md`
- `xxx.md` (implementation) → `docs/implementation/xxx.md`
## ✅ 验证清单
完成重组后,请验证:
- [ ] 根目录不再有重复的模块文件
- [ ] 所有文档文件已分类移动到 `docs/` 子目录
- [ ] `geo_tool.py` 中的导入路径已更新
- [ ] 所有文档中的路径引用已更新
- [ ] `python -c "from modules.data_storage import DataStorage"` 执行成功
- [ ] `streamlit run geo_tool.py` 运行正常
- [ ] 所有功能测试通过
## 📚 相关文档
- `QUICK_REORGANIZE.md` - 快速执行指南
- `PROJECT_STRUCTURE_ANALYSIS.md` - 详细的项目结构分析
- `docs/DIRECTORY_STRUCTURE_OPTIMIZATION.md` - 完整的优化方案
## 🎉 优化后的优势
1. **清晰的目录结构**:文件按功能分类,易于查找和管理
2. **模块化组织**:功能模块集中管理,便于维护和扩展
3. **文档分类清晰**:功能文档、分析报告、指南文档分开管理
4. **符合最佳实践**:遵循Python项目标准目录结构
5. **便于协作**:团队成员更容易理解项目结构
+100
View File
@@ -0,0 +1,100 @@
# 根目录文件管理规则
## 📋 根目录文件规范
### ✅ 允许在根目录的文件
**核心文件(必须保留)**
1. `README.md` - 项目主文档
2. `DOCS.md` - 文档索引
3. `geo_tool.py` - 主程序
4. `requirements.txt` - 依赖文件
5. `.gitignore` - Git配置
6. `.streamlit/` - Streamlit配置目录
### ❌ 禁止在根目录创建的文件
1. **文档文件(.md**
- ❌ 禁止在根目录创建任何新的 `.md` 文档
- ✅ 所有文档应放在 `docs/` 的相应子目录中
2. **功能模块文件(.py**
- ❌ 禁止在根目录创建功能模块文件
- ✅ 所有功能模块应放在 `modules/` 目录
3. **工具脚本文件(.py**
- ❌ 禁止在根目录创建工具脚本
- ✅ 所有工具脚本应放在 `scripts/` 目录
## 📁 文件位置规则
### 文档文件
| 文档类型 | 位置 | 示例 |
|---------|------|------|
| 功能文档 | `docs/features/` | `docs/features/CONFIG_OPTIMIZER_FEATURE.md` |
| 分析报告 | `docs/analysis/` | `docs/analysis/FEATURE_ANALYSIS.md` |
| 使用指南 | `docs/guides/` | `docs/guides/QUICK_START_GUIDE.md` |
| 实现文档 | `docs/implementation/` | `docs/implementation/IMPLEMENTATION_SUMMARY.md` |
### Python 文件
| 文件类型 | 位置 | 示例 |
|---------|------|------|
| 功能模块 | `modules/` | `modules/data_storage.py` |
| 工具脚本 | `scripts/` | `scripts/update_imports.py` |
| 主程序 | 根目录 | `geo_tool.py` |
| 平台同步 | `platform_sync/` | `platform_sync/github_publisher.py` |
## 🎯 创建新文件时的检查
创建新文件前,请确认:
1. **如果是文档文件**
- [ ] 是否放在了正确的 `docs/` 子目录?
- [ ] 是否更新了 `DOCS.md` 的索引?
2. **如果是功能模块**
- [ ] 是否放在了 `modules/` 目录?
- [ ] 是否更新了导入路径?
3. **如果是工具脚本**
- [ ] 是否放在了 `scripts/` 目录?
## 📝 当前需要清理的根目录文件
以下文件应删除或移动到合适位置:
### 需要删除的重复文档(docs/guides/中已有):
- `ADVANCED_OPTIMIZATION_PLAN.md`
- `FINAL_OPTIMIZATION_GUIDE.md`
- `REFERENCE_UPDATE_SUMMARY.md`
- `OPTIMIZATION_STATUS.md`
### 需要移动的文档:
- `MANUAL_CLEANUP_GUIDE.md``docs/guides/`
## 🚀 快速清理命令
```powershell
# 删除重复文档
Remove-Item ADVANCED_OPTIMIZATION_PLAN.md -Force
Remove-Item FINAL_OPTIMIZATION_GUIDE.md -Force
Remove-Item REFERENCE_UPDATE_SUMMARY.md -Force
Remove-Item OPTIMIZATION_STATUS.md -Force
# 移动文档
Move-Item MANUAL_CLEANUP_GUIDE.md -Destination "docs\guides\" -Force
```
## ✅ 清理后的根目录
清理完成后,根目录应该只有:
- `README.md`
- `DOCS.md`
- `geo_tool.py`
- `requirements.txt`
- `.gitignore`
- `.streamlit/` (目录)
**总计:5个核心文件 + 1个配置目录**
+194
View File
@@ -0,0 +1,194 @@
# 数据持久化方案对比
## 为什么不能用 IndexedDB
**IndexedDB 是浏览器 API**,只能在 JavaScript 前端使用。
**Streamlit 是 Python 后端应用**,运行在服务器端,无法使用 IndexedDB。
---
## 方案对比
### 方案1SQLite(⭐ 推荐)
**优点:**
- ✅ Python 内置支持(`sqlite3`),无需安装额外依赖
- ✅ 单文件数据库,易于备份和迁移
- ✅ 查询性能好,支持复杂查询
- ✅ 支持事务,数据安全
- ✅ 支持 SQL 查询,灵活强大
- ✅ 适合 MVP 到生产环境的平滑升级
**缺点:**
- ⚠️ 需要学习基本的 SQL(但很简单)
- ⚠️ 多进程写入需要处理锁(Streamlit 单进程,无此问题)
**代码复杂度:** ⭐⭐(非常简单)
**适用场景:** MVP 和生产环境都适用
---
### 方案2JSON 文件
**优点:**
- ✅ 最简单,无需学习 SQL
- ✅ 人类可读,易于调试
- ✅ 无需数据库知识
**缺点:**
- ❌ 查询性能差(需要加载整个文件)
- ❌ 数据量大时很慢
- ❌ 并发写入可能丢失数据
- ❌ 不支持复杂查询
**代码复杂度:** ⭐(极简单)
**适用场景:** 仅适合数据量很小(<1000条)的 MVP
---
## 推荐方案:SQLite
### 为什么推荐 SQLite
1. **其实很简单**:只需要几行代码
```python
import sqlite3
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
cursor.execute("INSERT INTO table VALUES (?)", (value,))
conn.commit()
conn.close()
```
2. **性能好**:即使数据量增长到几万条,依然很快
3. **功能强大**:支持统计、查询、分析,为后续功能扩展打好基础
4. **零依赖**:Python 内置,无需安装任何包
---
## 快速开始
### 1. 使用已封装好的 DataStorage 类
我已经为你创建了 `modules/data_storage.py`,提供了统一的接口:
```python
from data_storage import DataStorage
# 初始化(SQLite方式)
storage = DataStorage(storage_type="sqlite", db_path="geo_data.db")
# 保存关键词
storage.save_keywords(["关键词1", "关键词2"], "品牌名")
# 获取关键词
keywords = storage.get_keywords("品牌名")
# 保存文章
storage.save_article("关键词", "平台", "内容", "文件名", "品牌名")
# 获取统计数据
stats = storage.get_stats("品牌名")
```
### 2. 最小改动集成
在 `modules/geo_tool.py` 中,只需要在关键位置添加几行保存代码:
```python
# 文件顶部
from data_storage import DataStorage
storage = DataStorage(storage_type="sqlite", db_path="geo_data.db")
# 关键词生成后(约第533行)
if cleaned:
st.session_state.keywords = cleaned
storage.save_keywords(cleaned, brand) # 新增这一行
st.success(f"生成完成({len(cleaned)} 条)")
# 内容生成后(约第714行)
st.session_state.generated_contents = contents
storage.save_article(keyword, plat, content, filename, brand) # 在循环中添加
# 优化后(约第838行)
st.session_state.optimized_article = optimized_article
storage.save_optimization(
original_article, optimized_article, changes, target_platform, brand
) # 新增
# 验证后(约第932行)
st.session_state.verify_combined = combined
storage.save_verify_results(all_results) # 新增
```
### 3. 添加历史记录查看功能(可选)
可以新增一个 Tab 来查看历史数据:
```python
tab5 = st.tabs([..., "5 历史记录"])
with tab5:
st.header("历史记录")
# 统计数据
stats = storage.get_stats(brand)
col1, col2, col3, col4 = st.columns(4)
col1.metric("关键词", stats["keywords_count"])
col2.metric("文章", stats["articles_count"])
col3.metric("优化", stats["optimizations_count"])
col4.metric("验证", stats["verify_results_count"])
# 历史文章列表
articles = storage.get_articles(brand=brand)
if articles:
df = pd.DataFrame(articles)
st.dataframe(df[["keyword", "platform", "created_at"]])
```
---
## 数据库文件位置
- **SQLite 文件**`geo_data.db`(项目根目录)
- **JSON 文件**`data/` 目录(如果使用 JSON 方式)
**建议:** 将 `geo_data.db` 添加到 `.gitignore`,避免提交到版本控制。
---
## 性能对比(参考)
| 数据量 | SQLite | JSON文件 |
|--------|--------|----------|
| 100条 | <10ms | <10ms |
| 1000条 | <50ms | ~100ms |
| 10000条 | ~200ms | ~5秒 |
| 100000条 | ~1秒 | 很慢 |
---
## 总结
**对于 MVP 版本,强烈推荐使用 SQLite**
1. ✅ 简单:使用封装好的 `DataStorage` 类,只需几行代码
2. ✅ 高效:性能好,支持未来扩展
3. ✅ 可靠:数据安全,支持事务
4. ✅ 零依赖:Python 内置,无需安装
**如果数据量真的非常小(<100条),可以考虑 JSON 文件。**
---
## 下一步
1. 查看 `modules/data_storage.py` 了解实现细节
2. 查看 `modules/storage_example.py` 了解使用方法
3. 在 `modules/geo_tool.py` 中集成(参考上面的最小改动示例)
需要我帮你直接集成到 `modules/geo_tool.py` 吗?