| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #!/usr/bin/env node
- const { CASE_PATTERNS, PATTERN_LIBRARY, extractPatternHits } = require('../mcp/src/features/tihao-sourcing/brief-rule-patterns');
- const { parseBrief } = require('../mcp/src/features/tihao-sourcing/brief-parser');
- function main() {
- // 13 个真实案例结构化
- assert(CASE_PATTERNS.length === 13, `应有 13 个真实案例,实际 ${CASE_PATTERNS.length}`);
- assert(CASE_PATTERNS.some(item => item.id === 'case-2-dha'), '应包含 DHA 案例');
- assert(CASE_PATTERNS.some(item => item.id === 'case-6-zelimei'), '应包含泽立美案例');
- assert(CASE_PATTERNS.every(item => item.caseName && item.accountTypes), '每个案例应有 caseName 和 accountTypes');
- // 规则模式库
- assert(PATTERN_LIBRARY.cpc && PATTERN_LIBRARY.cpv && PATTERN_LIBRARY.recentPlays, '应包含 CPC/CPV/近3条播放模式');
- assert(PATTERN_LIBRARY.ipMustBe && PATTERN_LIBRARY.sameProvince, '应包含地域硬约束模式');
- assert(PATTERN_LIBRARY.underAgeRatio && PATTERN_LIBRARY.interestTags, '应包含低龄占比/兴趣标签模式');
- // 模式提取
- const dha = extractPatternHits('女性25-44岁占比70%以上,兴趣前三标签含2个:母婴/萌娃/记录生活,CPE≤3,阅读中位数≥4000,预估阅读单价≤1.0');
- assert(dha.some(item => item.key === 'interestTags'), '应识别兴趣标签模式');
- assert(dha.some(item => item.key === 'ageRatio'), '应识别年龄占比模式');
- const region = extractPatternHits('达人ip必须为宁夏');
- assert(region.some(item => item.key === 'ipMustBe'), '应识别达人IP硬约束');
- // parseBrief 端到端识别真实案例表达
- const dhaBrief = parseBrief({ briefText: '产品DHA,账号类型干货科普营养师妈妈。CPE≤3,阅读中位数≥4000,CPC≤0.8,近3条视频平均播放>30万,女性25-44岁占比70%以上,兴趣前三标签含2个,达人ip必须宁夏' });
- assert(dhaBrief.performanceRequirements.some(item => /CPE≤3/.test(item)), '应解析 CPE≤3');
- assert(dhaBrief.performanceRequirements.some(item => /CPC≤0.8/.test(item)), '应解析 CPC≤0.8');
- assert(dhaBrief.performanceRequirements.some(item => /近3条平均播放>30万/.test(item)), '应解析近3条播放');
- assert(dhaBrief.performanceRequirements.some(item => /25-44岁占比70%以上/.test(item)), '应解析年龄占比');
- assert(dhaBrief.performanceRequirements.some(item => /兴趣前三标签含2个/.test(item)), '应解析兴趣标签');
- assert(dhaBrief.performanceRequirements.some(item => /达人IP必须宁夏/.test(item)), '应解析达人IP');
- assert(Array.isArray(dhaBrief.briefRulePatterns) && dhaBrief.briefRulePatterns.length > 0, '应输出 briefRulePatterns');
- console.log(JSON.stringify({
- ok: true,
- caseCount: CASE_PATTERNS.length,
- patternCount: Object.keys(PATTERN_LIBRARY).length,
- parsedRequirementCount: dhaBrief.performanceRequirements.length,
- matchedPatternCount: dhaBrief.briefRulePatterns.length
- }, null, 2));
- }
- function assert(condition, message) {
- if (!condition) throw new Error(message);
- }
- if (require.main === module) main();
|