#!/bin/bash # ============================================================================ # 平安书反思生成模块 v1.0.5 (Python修复版) # ============================================================================ NOVEL_DIR="/root/.openclaw/workspace/平安书" REFLECTION_DIR="$NOVEL_DIR/反思记录" TIMESTAMP=$(date '+%Y-%m-%d %H:%M') mkdir -p "$REFLECTION_DIR" echo "╔════════════════════════════════════════════════════╗" echo "║ 平安书反思生成模块 v1.0.5 ║" echo "╚════════════════════════════════════════════════════╝" echo "" # 检测最新章节 latest=$(ls -t "$NOVEL_DIR"/第*章*.txt 2>/dev/null | head -1) if [ -z "$latest" ]; then echo "ℹ️ 未发现章节文件" exit 0 fi chapter_name=$(basename "$latest" .txt) reflection_file="$REFLECTION_DIR/${chapter_name}-反思.md" if [ -f "$reflection_file" ]; then echo "⚠️ 已有反思记录: $chapter_name" exit 0 fi echo "📖 章节: ${chapter_name}.txt" echo "" # Python统计分析 stats=$(python3 -c " import sys import re with open('$latest', 'r', encoding='utf-8') as f: content = f.read() # 字数 char_count = sum(1 for c in content if '\u4e00' <= c <= '\u9fff') # 内心独白 inner = len(re.findall(r'想道|心中|暗自|默念|忖道', content)) # 动作描写 action = len(re.findall(r'身形|身形一|伸手|抬手|迈步|纵身|疾驰|飞奔', content)) # 对话 (引号数量/2) dialogue = content.count('「') + content.count('”') dialogue = dialogue // 2 # 环境描写 env = len(re.findall(r'天空|山林|月光|风声|树叶|流水', content)) # 评分 inner_score = 25 if inner >= 3 else inner * 8 action_score = 25 if action >= 3 else action * 8 dialogue_score = 25 if dialogue >= 4 else dialogue * 6 env_score = 25 if env >= 5 else env * 5 total = inner_score + action_score + dialogue_score + env_score print(f'{char_count}|{inner}|{action}|{dialogue}|{env}|{inner_score}|{action_score}|{dialogue_score}|{env_score}|{total}') " 2>/dev/null) if [ -z "$stats" ]; then echo "❌ 统计分析失败" exit 1 fi IFS='|' read -r char_count inner action dialogue env inner_score action_score dialogue_score env_score total <<< "$stats" echo " 📊 字数: $char_count 字" echo " 💭 内心独白: $inner 处" echo " ⚡ 动作描写: $action 处" echo " 💬 对话: $dialogue 段" echo " 🌲 环境描写: $env 处" echo "" echo "📊 牧神记风格评分: $total/100" # 评估 if [ "$char_count" -ge 5000 ] && [ "$char_count" -le 8000 ] && [ "$inner" -ge 3 ] && [ "$action" -ge 3 ] && [ "$dialogue" -ge 4 ] && [ "$env" -ge 5 ]; then eval_status="✅ **章节评估: 合格**" eval_detail="本章达到牧神记风格标准,可进入发表流程。" issues="" else eval_status="⚠️ **章节评估: 需要改进**" eval_detail="未达标项:" issues=1 fi [ "$inner" -lt 3 ] && eval_detail="${eval_detail}\n- 内心独白不足 ($inner/3)" [ "$action" -lt 3 ] && eval_detail="${eval_detail}\n- 动作描写不足 ($action/3)" [ "$dialogue" -lt 4 ] && eval_detail="${eval_detail}\n- 对话不足 ($dialogue/4)" [ "$env" -lt 5 ] && eval_detail="${eval_detail}\n- 环境描写不足 ($env/5)" [ "$char_count" -lt 5000 ] && eval_detail="${eval_detail}\n- 字数不足 ($char_count/5000)" [ "$char_count" -gt 8000 ] && eval_detail="${eval_detail}\n- 字数超标 ($char_count/8000)" # 生成报告 cat > "$reflection_file" << EOF # ${chapter_name} - 反思报告 **时间**: $TIMESTAMP **章节**: ${chapter_name}.txt ## 基本信息 | 项目 | 数值 | |------|------| | 字数 | $char_count 字 | | 内心独白 | $inner 处 | | 动作描写 | $action 处 | | 对话 | $dialogue 段 | | 环境描写 | $env 处 | ## 评分 | 维度 | 得分 | 说明 | |------|------|------| | 内心独白 | $inner_score/25 | $([ "$inner" -ge 3 ] && echo "✅" || echo "⚠️") | | 动作描写 | $action_score/25 | $([ "$action" -ge 3 ] && echo "✅" || echo "⚠️") | | 对话 | $dialogue_score/25 | $([ "$dialogue" -ge 4 ] && echo "✅" || echo "⚠️") | | 环境描写 | $env_score/25 | $([ "$env" -ge 5 ] && echo "✅" || echo "⚠️") | **总分**: $total/100 ## 评估 $eval_status $eval_detail ## 改进建议 - 根据评分针对性优化 - 参考牧神记原文提升描写技巧 --- *自动生成于 $TIMESTAMP* EOF echo "" echo "✅ 反思报告已生成: $(basename "$reflection_file")" ls -la "$reflection_file"