This commit is contained in:
2026-07-14 18:52:19 -05:00
parent e367b6ac29
commit e46f00c838

70
add_name_from_filename.ts Normal file
View File

@@ -0,0 +1,70 @@
#!/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 <buyers_vision.json> [--overwrite]");
process.exit(1);
}
const raw = await fsp.readFile(file, "utf8");
const records: Array<Record<string, unknown>> = 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); });