#!/bin/bash # 图谱构建与可视化流程(步骤5-9) # # 依赖前置步骤(1-4)已执行完成: # 1. extract_feature_categories.py # 2. extract_features_from_posts.py # 3. extract_current_posts.py # 4. match_inspiration_features.py # # 本脚本执行: # 5. filter_how_results.py - 过滤how解构结果 # 6. extract_nodes_and_edges.py - 提取节点和边 # 7. build_persona_tree.py - 构建人设树 # 8. build_match_graph.py - 构建匹配图谱 # 9. build_post_tree.py - 构建帖子树 # 10. visualize_match_graph.py - 生成可视化HTML # # 使用方式: # ./run_graph_pipeline.sh # 使用默认账号 # ./run_graph_pipeline.sh 阿里多多酱 # 指定账号 # ACCOUNT_NAME=xxx ./run_graph_pipeline.sh set -e # 遇到错误立即退出 # 获取脚本所在目录的绝对路径 SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" cd "$PROJECT_ROOT" # 颜色定义 GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' print_info() { echo -e "${BLUE}[INFO]${NC} $1"; } print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; } print_step() { echo -e "${YELLOW}[$1]${NC} $2"; } # 执行单个步骤 run_step() { local step_num=$1 local step_name=$2 local script_name=$3 print_step "$step_num/6" "$step_name" if python "script/data_processing/$script_name"; then print_success "$step_name 完成" echo "" return 0 else print_error "$step_name 失败" return 1 fi } # 主处理函数 process_account() { local account_name=$1 echo "" echo "==========================================" echo "图谱构建与可视化流程" echo "账号: $account_name" echo "项目: $PROJECT_ROOT" echo "==========================================" echo "" # 设置环境变量 export ACCOUNT_NAME="$account_name" # 步骤5: 过滤how解构结果 run_step 1 "过滤how解构结果" "filter_how_results.py" || return 1 # 步骤6: 提取节点和边 run_step 2 "提取节点和边" "extract_nodes_and_edges.py" || return 1 # 步骤7: 构建人设树 run_step 3 "构建人设树" "build_persona_tree.py" || return 1 # 步骤8: 构建匹配图谱 run_step 4 "构建匹配图谱" "build_match_graph.py" || return 1 # 步骤9: 构建帖子树 run_step 5 "构建帖子树" "build_post_tree.py" || return 1 # 步骤10: 生成可视化HTML run_step 6 "生成可视化HTML" "visualize_match_graph.py" || return 1 echo "==========================================" print_success "图谱构建与可视化流程完成!" echo "==========================================" } # 获取默认账号 get_default_account() { python -c " import json from pathlib import Path config_file = Path('config/accounts.json') with open(config_file) as f: config = json.load(f) print(config.get('default_account', '')) " } # 主逻辑 main() { local account_name="" # 解析参数 if [ -n "$1" ]; then account_name="$1" elif [ -n "$ACCOUNT_NAME" ]; then account_name="$ACCOUNT_NAME" else account_name=$(get_default_account) if [ -z "$account_name" ]; then print_error "未指定账号,请通过参数或环境变量指定" echo "用法: $0 <账号名>" exit 1 fi print_info "使用默认账号: $account_name" fi process_account "$account_name" } main "$@"