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:
+4
-1
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user