Files
my-project/config/openclaw/scripts/novel-learning/novel-reflection-trigger.sh
T

149 lines
4.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"