Entferne unerreichbaren Zweig im Rank-Muster, korrigiere Testnamen

src/ocr-extract.js: RANK_PATTERN enthielt [Xx], obwohl der Text an dieser
Stelle bereits vollstaendig grossgeschrieben ist (normalizeToken laeuft
vorher) - das kleine x konnte nie ankommen. Auf X reduziert, mit Kommentar
begruendet. Die uebrigen Muster im Modul (CAPACITY_PATTERN, SPEED_PATTERN,
PART_NUMBER_PATTERN, das formFactor-Muster, DATE_CODE_PATTERN) geprueft:
keine weiteren unerreichbaren Zweige, alle nutzen bereits ausschliesslich
Grossbuchstaben-Zeichenklassen bzw. Ziffern.

test/ocr-extract.test.js: Testname behauptete "nur einer plausibel", der
Referenztext enthaelt aber zwei plausible Datumscode-Kandidaten (1234 und
1908) - der Test belegt tatsaechlich, dass bei mehreren plausiblen
Kandidaten der zuletzt vorkommende gewinnt. Umbenannt entsprechend.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
vchuser
2026-07-28 18:24:52 +02:00
co-authored by Claude Opus 5
parent 4b2553d4f4
commit 096b687d06
2 changed files with 5 additions and 2 deletions
+4 -1
View File
@@ -7,7 +7,10 @@ const CAPACITY_PATTERN = /\b([0-9OQBSIL]{1,3})\s?GB\b/g;
// Kein \b am Ende: auf Etiketten folgt der Geschwindigkeit oft direkt // Kein \b am Ende: auf Etiketten folgt der Geschwindigkeit oft direkt
// ein Buchstabe (PC4-2400T), und dort gibt es keine Wortgrenze. // ein Buchstabe (PC4-2400T), und dort gibt es keine Wortgrenze.
const SPEED_PATTERN = /\bPC4[-\s]?([0-9OQ]{4})/g; const SPEED_PATTERN = /\bPC4[-\s]?([0-9OQ]{4})/g;
const RANK_PATTERN = /\b([0-9OQ][DS]?R[Xx][0-9OQ])\b/g; // Nur Grossbuchstabe X: der Text ist an dieser Stelle bereits vollstaendig
// grossgeschrieben (siehe normalizeToken/text unten), ein kleines x kann
// hier also nie ankommen - die entsprechende Alternative waere toter Code.
const RANK_PATTERN = /\b([0-9OQ][DS]?RX[0-9OQ])\b/g;
const PART_NUMBER_PATTERN = /\b([A-Z]{1,3}[0-9]{2,4}[A-Z0-9]{4,}(?:-[A-Z0-9]{2,6})?)\b/g; const PART_NUMBER_PATTERN = /\b([A-Z]{1,3}[0-9]{2,4}[A-Z0-9]{4,}(?:-[A-Z0-9]{2,6})?)\b/g;
const DATE_CODE_PATTERN = /(?:^|\s)([0-9]{4})(?=\s|$)/g; const DATE_CODE_PATTERN = /(?:^|\s)([0-9]{4})(?=\s|$)/g;
+1 -1
View File
@@ -60,7 +60,7 @@ test('waehlt bei der Teilenummer den laengsten Bindestrich-Kandidaten, nicht den
assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y'); assert.equal(spec.partNumber, 'M386A8K40BM1-CRC4Y');
}); });
test('verwirft den Datumscode, wenn mehrere vierstellige Bloecke vorkommen und nur einer plausibel ist', () => { test('bei mehreren plausiblen Datumscode-Kandidaten gewinnt der zuletzt vorkommende', () => {
const spec = extractFields('SAMSUNG\n1234 5678\n64GB 2Rx4 PC4-2666\n9012\n1908'); const spec = extractFields('SAMSUNG\n1234 5678\n64GB 2Rx4 PC4-2666\n9012\n1908');
assert.equal(spec.dateCode, '1908'); assert.equal(spec.dateCode, '1908');
}); });