#!/usr/bin/env npx tsx /** * add_name_from_filename.ts * * Traegt das Feld "name_from_filename" in eine bestehende buyers_vision.json * nach, OHNE die Vision-Ergebnisse anzufassen und OHNE GPU/Neuverarbeitung. * Nutzt exakt dieselbe Logik wie der vision_runner, damit die Werte * identisch zu kuenftigen Laeufen sind. * * Aufruf: * npx tsx add_name_from_filename.ts out_Z/buyers_vision.json * npx tsx add_name_from_filename.ts out_Z/buyers_vision.json --overwrite * * Ohne --overwrite werden nur Datensaetze ergaenzt, die das Feld noch nicht * (oder null) haben. Ein Backup .bak wird immer angelegt. */ import { promises as fsp } from "node:fs"; // IDENTISCH zur Funktion im vision_runner.ts function nameFromFilename(fileName: string): string | null { let s = fileName.replace(/\.pdf$/i, ""); s = s.replace(/\([^)]*\)/g, " ").replace(/\s+/g, " ").trim(); const comma = s.indexOf(","); if (comma < 0) { const first = s.replace(/\b\d{4,8}\b.*$/, "").trim(); return first.length >= 2 ? first : null; } const last = s.slice(0, comma).trim(); const rest = s.slice(comma + 1).trim(); const firstName = (rest.match(/^[A-Za-zÀ-ÿ.'-]+/) || [""])[0]; if (!last || !firstName) return null; return `${last}, ${firstName}`; } async function main() { const args = process.argv.slice(2); const file = args.find((a) => !a.startsWith("--")); const overwrite = args.includes("--overwrite"); if (!file) { console.error("Aufruf: npx tsx add_name_from_filename.ts [--overwrite]"); process.exit(1); } const raw = await fsp.readFile(file, "utf8"); const records: Array> = JSON.parse(raw); // Backup await fsp.writeFile(file + ".bak", raw); let added = 0, skipped = 0, unchanged = 0; for (const r of records) { const fn = r["file_name"] as string | undefined; if (!fn) { skipped++; continue; } const has = r["name_from_filename"] != null && r["name_from_filename"] !== ""; if (has && !overwrite) { unchanged++; continue; } const val = nameFromFilename(fn); if (r["name_from_filename"] === val) { unchanged++; continue; } r["name_from_filename"] = val; added++; } await fsp.writeFile(file, JSON.stringify(records, null, 2)); console.log(`Datensaetze: ${records.length}`); console.log(`Feld gesetzt: ${added}`); console.log(`schon vorhanden: ${unchanged}`); console.log(`ohne file_name: ${skipped}`); console.log(`Backup: ${file}.bak`); } main().catch((e) => { console.error(e); process.exit(1); });