| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #!/usr/bin/env node
- // ==============================================================================
- // 江中乳酸菌素片儿童版 · VOC 深度洞察报告 v2 生成入口
- // 叙事线:王总 5 步分析路径(品类→成人→迁移→交叉→定位→落地)
- // ==============================================================================
- const fs = require('fs');
- const path = require('path');
- const { buildHTML, CHAPTERS, CHAPTER_SUBSECTIONS } = require('./lactic-v2-render.js');
- const LA = require('./lactic-analyze.js');
- const ROOT = path.resolve(__dirname, '..', '..');
- const OUT_DIR = path.join(ROOT, 'reports');
- const OUT_FILE = path.join(OUT_DIR, 'jiangzhong-lactic-children-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(王总 5 步路径) ║');
- 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(/<section class="report-section"/g) || []).length;
- const chNames = CHAPTERS.map(c => c.title).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: '抖音', 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`);
|