debug_cases.js 1.57 KB
const path = require('path');
const fs = require('fs');

const DIGEST_DIR = path.resolve('..', 'digest');

function loadJsonl(p) {
  const text = fs.existsSync(p) ? fs.readFileSync(p, 'utf-8') : '';
  return text.split('\n').map(l => l.trim()).filter(Boolean).map((l, idx) => {
    try { return { ...JSON.parse(l), _lineIdx: idx }; } catch { return null; }
  }).filter(Boolean);
}

const trainCases = loadJsonl(path.join(DIGEST_DIR, 'train.jsonl'));
const testCases = loadJsonl(path.join(DIGEST_DIR, 'test.jsonl'));

function classifyCase(record, useInput) {
  const raw = useInput ? ((record.input || {}).raw_record || {}) : (record.raw_data || {});
  const hasIcon = !!(raw.icon || raw.small_icon_desc || raw.icon_desc);
  const isNewOrHot = raw.label_name === '新' || raw.label_name === '热';
  const hasFlagDesc = !!raw.flag_desc;
  const isTopic = raw.topic_flag === 1 || raw.topic_flag === true;
  if ((hasIcon || isNewOrHot) && !hasFlagDesc) return 'type_a';
  if (hasFlagDesc && !hasIcon && !isNewOrHot) return 'type_c';
  if (hasFlagDesc && (hasIcon || isNewOrHot)) return 'type_ac';
  if (isTopic && !hasIcon && !isNewOrHot && !hasFlagDesc) return 'type_b';
  return 'type_d';
}

const allCases = [...trainCases, ...testCases];
console.log('Total cases:', allCases.length);

const types1 = {};
const types2 = {};
for (const c of allCases) {
  types1[classifyCase(c, false)] = (types1[classifyCase(c, false)] || 0) + 1;
  types2[classifyCase(c, true)] = (types2[classifyCase(c, true)] || 0) + 1;
}
console.log('Types from raw_data:', types1);
console.log('Types from input.raw_record:', types2);