field-aligner —— Feldnamen unscharf zuordnen und angleichen
Ordnet Feldnamen beliebiger Herkunft den von Ihnen definierten Standardschlüsseln zu. Erkennt Chinesisch/Englisch/CamelCase/Unterstrich gemischt. Reine Funktionsimplementierung (Node ESM, zero dependencies). Wortschatz kann injiziert werden, standardmäßig mit einem allgemeinen Beispielwortschatz.
Anwendungsszenarien
- Integration von ERP / offenen Plattformen / internen Middleware-Systemen: Die Feldnamen des Gegenübers stimmen nicht mit Ihren eigenen überein.
- Zusammenführung mehrerer Datenquellen: Verschiedene Systeme verwenden unterschiedliche Bezeichnungen für dasselbe Feld.
- Strukturierung von Dokumenten / Tabellen: Abbildung von Tabellenköpfen auf Standardfelder.
Bereitgestellte Funktionen
| Funktion | Beschreibung |
|---|---|
normalize(name) | Normalisierung: Kleinschreibung + Entfernung von _-Leerzeichen |
buildVocabulary(input) | Wandelt {key:[aliases]} oder [{key,aliases}] in eine einheitliche Struktur um |
matchField(name, vocabulary, opts?) | Einzelfeldabgleich, gibt {key, matched, score, via} zurück |
batchMatchFields(names, vocabulary, opts?) | Batch-Abgleich |
DEFAULT_VOCABULARY | Allgemeiner Beispielwortschatz (E-Commerce / allgemeine Felder) |
Abgleichsstrategie:
- Exakt: Nach Normalisierung ist key oder ein Alias genau gleich →
via:'exact' - Unscharf: Teilstring-Übereinstimmung (je länger die Überlappung, desto höher die Punktzahl), Punktzahl ≥
fuzzyThreshold(Standard 0.6) →via:'fuzzy' - Keine Übereinstimmung →
{key:null, matched:false, via:'none'}
Verwendung
import { matchField, batchMatchFields, DEFAULT_VOCABULARY } from './scripts/field-aligner.mjs';
// 1) Mit Standardwortschatz
const r = matchField('商品标题', DEFAULT_VOCABULARY);
// => { key: 'title', matched: true, score: 1, via: 'exact' }
// 2) Eigenen Wortschatz injizieren
const myVocab = {
order_no: ['订单号', '单号', 'orderNumber'],
buyer_name: ['买家', '收货人', 'buyer'],
};
batchMatchFields(['订单号', '买家', '备注'], myVocab);
// => { 订单号:{key:'order_no',...}, 买家:{key:'buyer_name',...}, 备注:{key:null,...} }
Selbsttest
node scripts/field-aligner.mjs --selftest