Spracherkennung für OCR-Texte und Qualitätsbewertung (Konfidenzwert), um schlechte OCR-Ergebnisse kenntlich zu machen. Letztes Ticket vor QA-03. - ocr/language.go: RecognizeWithLanguageAndConfidence erkennt ein Bild einzeln je Kandidatensprache (deu/eng) im Tesseract-TSV-Modus — die Sprache mit höherem Konfidenzwert gewinnt, derselbe Lauf liefert den Konfidenzwert direkt mit. - search: neue Felder ocr_language/ocr_confidence (Migrationen 0006/0007, gleiches ALTER-Muster wie SRC-05), in Document/Result gespiegelt. Client.AttachmentsBelowConfidence filtert gezielt auf niedrige Konfidenz, schließt Dokumente ohne OCR-Anhang aus. - Regressionsbug gefunden und behoben: reindex.go (SRC-09) kannte die neuen OCR-Spalten nicht, Reindex wäre mit "unknown column" fehlgeschlagen. Prüfungen (alle real durchgeführt, siehe mail/docs/SRC-10-PRUEFPROTOKOLL.md): 1. TestRecognizeWithLanguageAndConfidence_MultilingualCorpus: deutsches und englisches Testbild real korrekt als deu/eng erkannt. 2. TestRecognizeWithLanguageAndConfidence_DegradedImageLowersConfidence: künstliche Verschlechterung senkt Konfidenz real von 91,76 auf 28,21. 3. TestAttachmentsBelowConfidence_QueryReturnsExpectedResults: Abfrage unterhalb Schwelle liefert real genau die erwarteten 2 von 4 Treffern. Kein Umbau: Search/Facets/SearchWithFilters/Index/Delete-Verhalten sonst unverändert, dedup/indexworker/storage/crypto/encstorage/savedsearch unverändert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
58 lines
3.3 KiB
Markdown
58 lines
3.3 KiB
Markdown
# SRC-10 – Prüfprotokoll: Spracherkennung & OCR-Qualitätsbewertung
|
||
|
||
Voraussetzung SRC-07 (Fertig).
|
||
|
||
## Umsetzung
|
||
|
||
- `mail/internal/ocr/language.go` — `RecognizeWithLanguageAndConfidence`:
|
||
Tesseract erkennt bei kombinierten Sprachpaketen (`deu+eng`) nicht,
|
||
WELCHE Sprache vorlag — daher wird das Bild bewusst EINZELN mit jedem
|
||
Kandidaten (`deu`, `eng`) im TSV-Ausgabemodus erkannt; die Sprache mit
|
||
dem höheren durchschnittlichen Worterkennungs-Konfidenzwert gewinnt
|
||
(Akzeptanzkriterium 1). Derselbe Tesseract-TSV-Lauf liefert den
|
||
Konfidenzwert direkt mit (Akzeptanzkriterium 2, 0–100, Mittelwert über
|
||
alle erkannten Wörter) — keine zweite externe Bibliothek nötig.
|
||
- `mail/internal/search`: neue Felder `ocr_language`/`ocr_confidence`
|
||
(Migrationen 0006/0007, gleiches ALTER-Muster wie SRC-05), in
|
||
`Document`/`Result` gespiegelt (Akzeptanzkriterium 1: für Anzeige
|
||
nutzbar). Neue Methode `Client.AttachmentsBelowConfidence(ctx,
|
||
tenantSlug, threshold)` (Akzeptanzkriterium 3: gezielt für manuelle
|
||
Nachbearbeitung auffindbar) — filtert `ocr_confidence < threshold`,
|
||
schließt Dokumente ohne OCR-Anhang (`ocr_confidence` bleibt 0) explizit
|
||
aus.
|
||
- Echten Regressionsbug beim eigenen Testlauf gefunden und behoben:
|
||
`reindex.go`s `buildCreateTableSQL` (SRC-09) kannte die neuen
|
||
OCR-Spalten nicht — ein Reindex nach dieser Kachel wäre mit "unknown
|
||
column" fehlgeschlagen. Jetzt ergänzt, mit Wartungshinweis im
|
||
Quelltext für künftige Schema-Erweiterungen.
|
||
- Kein Umbau: `Search`/`Facets`/`SearchWithFilters`/`Index`/`Delete`-
|
||
Verhalten sonst unverändert, `mail/internal/dedup`/`indexworker`/
|
||
`storage`/`crypto`/`encstorage`/`savedsearch` unverändert.
|
||
|
||
## Prüfungen
|
||
|
||
| # | Prüfung | Ergebnis |
|
||
|---|---|---|
|
||
| 1 | Test mit mehrsprachigem Testkorpus bestätigt korrekte Spracherkennung | **bestanden** – `TestRecognizeWithLanguageAndConfidence_MultilingualCorpus`: reales deutsches Testbild ("Rechnung ueber Lieferung...") real als `deu` erkannt, reales englisches Testbild ("Invoice for delivery...") real als `eng` erkannt |
|
||
| 2 | Test: künstlich verschlechtertes Bild erzeugt niedrigeren Konfidenzwert | **bestanden** – `TestRecognizeWithLanguageAndConfidence_DegradedImageLowersConfidence`: reproduzierbare Pixelierung + Kontrastreduktion (reiner Go-Standardbibliothekscode, kein externes Werkzeug) senkt den real gemessenen Konfidenzwert von 91,76 auf 28,21 |
|
||
| 3 | Abfrage aller Anhänge unterhalb einer Konfidenzschwelle liefert erwartete Treffer | **bestanden** – `TestAttachmentsBelowConfidence_QueryReturnsExpectedResults`: 4 Dokumente (2 niedrig-, 1 hoch-konfident, 1 ohne OCR-Anhang), Abfrage mit Schwelle 50 liefert real genau die 2 niedrig-konfidenten, weder den hoch-konfidenten noch den ohne OCR-Anhang |
|
||
|
||
## Build/Test-Ergebnis (192.168.1.131)
|
||
|
||
```
|
||
go build ./... -> clean
|
||
go vet ./... -> clean
|
||
golangci-lint run ./... -> 0 issues
|
||
go test ./internal/ocr/... -v -run 'Language|Degraded' -> 2/2 bestanden
|
||
TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1
|
||
-> alle Pakete bestanden (Regressionsbug in reindex.go vor diesem
|
||
Protokoll gefunden und behoben, danach vollständig grün)
|
||
```
|
||
|
||
## Gesamtergebnis
|
||
|
||
**Bestanden.** Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen
|
||
real erfüllt. Entsperrt QA-03 (gemeinsam mit ARC-08, SRC-02, SRC-04,
|
||
SRC-05, SRC-08, SRC-09 — alle jetzt Fertig, letzte fehlende
|
||
Abhängigkeit).
|