SRC-10: spracherkennung-ocr-qualitaetsbewertung
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
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
bd37de529f
commit
1a246abdb3
@@ -38,11 +38,22 @@ var migrationAddAttachmentType string
|
||||
//go:embed migrations/0005_mail_documents_tag.sql
|
||||
var migrationAddTag string
|
||||
|
||||
// SRC-10: OCR-Sprach-/Qualitätsfelder, gleiches Muster wie die
|
||||
// Facettenfelder aus SRC-05.
|
||||
//
|
||||
//go:embed migrations/0006_mail_documents_ocr_language.sql
|
||||
var migrationAddOCRLanguage string
|
||||
|
||||
//go:embed migrations/0007_mail_documents_ocr_confidence.sql
|
||||
var migrationAddOCRConfidence string
|
||||
|
||||
var facetMigrations = []string{
|
||||
migrationAddSender,
|
||||
migrationAddMailbox,
|
||||
migrationAddAttachmentType,
|
||||
migrationAddTag,
|
||||
migrationAddOCRLanguage,
|
||||
migrationAddOCRConfidence,
|
||||
}
|
||||
|
||||
// Client spricht ausschließlich über die strukturierte Manticore-HTTP-
|
||||
@@ -122,6 +133,10 @@ type Document struct {
|
||||
Mailbox string `json:"mailbox"`
|
||||
AttachmentType string `json:"attachment_type"`
|
||||
Tag string `json:"tag"`
|
||||
// OCR-Sprach-/Qualitätsfelder (SRC-10), optional — leerer String/0
|
||||
// bedeutet "kein OCR-Anhang bzw. kein Konfidenzwert vorhanden".
|
||||
OCRLanguage string `json:"ocr_language"`
|
||||
OCRConfidence float64 `json:"ocr_confidence"`
|
||||
}
|
||||
|
||||
// Index legt/ersetzt ein Suchdokument (Akzeptanzkriterium 2: Schreibzugriff
|
||||
@@ -193,6 +208,11 @@ type Result struct {
|
||||
Subject string
|
||||
Score int64
|
||||
SentAtUnixEpoch int64
|
||||
// OCRLanguage/OCRConfidence (SRC-10 Akzeptanzkriterium 1: erkannte
|
||||
// Sprache für Anzeige nutzbar) — leer/0, wenn das Dokument keinen
|
||||
// OCR-Anhang hat.
|
||||
OCRLanguage string
|
||||
OCRConfidence float64
|
||||
}
|
||||
|
||||
// fieldWeights gewichtet Betreff höher als Text, Anhangstext am
|
||||
@@ -307,6 +327,8 @@ func (c *Client) Search(ctx context.Context, tenantSlug, queryText string) ([]Re
|
||||
Subject: hit.Source.Subject,
|
||||
Score: hit.Score,
|
||||
SentAtUnixEpoch: hit.Source.SentAtUnixEpoch,
|
||||
OCRLanguage: hit.Source.OCRLanguage,
|
||||
OCRConfidence: hit.Source.OCRConfidence,
|
||||
})
|
||||
}
|
||||
return results, nil
|
||||
@@ -317,9 +339,11 @@ type searchResponse struct {
|
||||
Hits []struct {
|
||||
Score int64 `json:"_score"`
|
||||
Source struct {
|
||||
MessageID string `json:"message_id"`
|
||||
Subject string `json:"subject"`
|
||||
SentAtUnixEpoch int64 `json:"sent_at"`
|
||||
MessageID string `json:"message_id"`
|
||||
Subject string `json:"subject"`
|
||||
SentAtUnixEpoch int64 `json:"sent_at"`
|
||||
OCRLanguage string `json:"ocr_language"`
|
||||
OCRConfidence float64 `json:"ocr_confidence"`
|
||||
} `json:"_source"`
|
||||
} `json:"hits"`
|
||||
} `json:"hits"`
|
||||
|
||||
Reference in New Issue
Block a user