#!/usr/bin/env node // ============================================================================== // 江中肝纯片 · VOC 深度洞察报告 v2 生成入口 // 会议增量优化:自身画像 + VOC 归拢 + 竞品正反面 + 里斯×特劳特 // ============================================================================== const fs = require('fs'); const path = require('path'); const { buildHTML, CHAPTERS, CHAPTER_SUBSECTIONS } = require('./liver-v2-render.js'); const LA = require('./liver-analyze.js'); const ROOT = path.resolve(__dirname, '..', '..'); const OUT_DIR = path.join(ROOT, 'reports'); const OUT_FILE = path.join(OUT_DIR, 'jiangzhong-liver-voc-insight-report-v2.html'); if (!fs.existsSync(OUT_DIR)) fs.mkdirSync(OUT_DIR, { recursive: true }); const data = LA.loadMerged(); const meta = LA.getMeta(data); console.log('╔═══════════════════════════════════════════════════════════════╗'); console.log('║ 江中肝纯片 · VOC 深度洞察报告 v2(会议增量优化版) ║'); console.log('╚═══════════════════════════════════════════════════════════════╝'); console.log(` 采集阶段: ${meta.stage}`); console.log(` 输出: ${path.relative(ROOT, OUT_FILE)}`); const start = Date.now(); const html = buildHTML({ product: '江中肝纯片', collectedAt: meta.collectedAt, }); fs.writeFileSync(OUT_FILE, html, 'utf8'); const elapsedMs = Date.now() - start; const sizeKB = (fs.statSync(OUT_FILE).size / 1024).toFixed(1); const SLIDES = (html.match(/report-section/g) || []).length; const chNames = CHAPTERS.map(c => c.title.split('·')[0].trim()).join(' / '); console.log(` 章节: ${CHAPTERS.length} 大章(${chNames})`); console.log(` slide 总数: ${SLIDES}`); console.log(` VOC 数据: ${meta.comments} 条评论 / ${Object.keys(meta.platforms).length} 平台 / ${meta.keywords} 关键词`); for (const [pf, n] of Object.entries(meta.platforms)) { const pfName = { xhs: '小红书', douyin: '抖音', amazon: 'Amazon', unknown: '未知' }[pf] || pf; console.log(` · ${pfName}: ${n}`); } if (Object.keys(meta.hypotheses).length) { console.log(` · 假设覆盖: ${Object.entries(meta.hypotheses).map(([k, v]) => `${k}:${v}`).join(' / ')}`); } console.log(' ✅ 生成完成'); console.log(` 路径: ${path.relative(ROOT, OUT_FILE)}`); console.log(` 大小: ${sizeKB} KB`); console.log(` 耗时: ${elapsedMs} ms`);