24 lines
1.2 KiB
TypeScript
24 lines
1.2 KiB
TypeScript
import { confirmedReviewCorpus, type ConfirmedReviewEvalCase } from "./confirmedReviewCorpus";
|
|
import { seedCorpus } from "./seedCorpus";
|
|
import type { OcrEvalCase } from "../ocrEvalHarness";
|
|
|
|
export { confirmedReviewCorpus, seedCorpus };
|
|
export type { ConfirmedReviewEvalCase };
|
|
|
|
export const ocrEvalCorpus: OcrEvalCase[] = [...seedCorpus, ...confirmedReviewCorpus];
|
|
|
|
export function validateConfirmedReviewCorpus(corpus: readonly ConfirmedReviewEvalCase[] = confirmedReviewCorpus) {
|
|
const errors: string[] = [];
|
|
const seen = new Set<string>();
|
|
for (const entry of corpus) {
|
|
if (seen.has(entry.id)) errors.push(`${entry.id}: duplicate id`);
|
|
seen.add(entry.id);
|
|
if (entry.confirmed !== true) errors.push(`${entry.id}: confirmed must be true`);
|
|
if (entry.meta.source !== "review-sample") errors.push(`${entry.id}: meta.source must be review-sample`);
|
|
if (!entry.meta.note?.trim()) errors.push(`${entry.id}: meta.note must describe the review source/reason`);
|
|
if (Object.keys(entry.expect).length === 0) errors.push(`${entry.id}: expect must label at least one field`);
|
|
if (Object.keys(entry.ocr).length === 0) errors.push(`${entry.id}: ocr must contain at least one field`);
|
|
}
|
|
return errors;
|
|
}
|