Anche... vediamo cosa salta fuori![]()
Anche... vediamo cosa salta fuori![]()
Potresti fare una funzione del genere.
Visto che da quello che si è capito più o meno lo stringhe sono uguali
con l'aggiunta di qualche imperfezione (una lettera di meno, o una diversa ecc...)
Cicli sulla Lenght della stringa Actual, carattere per carattere confronti
l'Actual string con la tua Expected, se trovi una differenza te la registri,
la registrazione potrebbe essere l'incrementazione di un count oppure aggiungere
il carattere sbagliato in una collection (così alla fine sai anche quali sono i caratteri sbagliati)
Dopo di chè sostituisci il char errato della stringa Actual con il corretto carattere della stringa
Expected, la stringa risultante la passi in input all funzione stessa (quindi stiamo parlando di una funzione ricorsiva)
La signature potrebbe essere tipo
FindNumberOfDifferentChar(string expected, string actual)
vedi te come gestirti il risultato, se una variabile a livello di classe o di ritorno dal metodo oppure
un parametro ref: FindNumberOfDifferentChar(string expected, string actual,ref Collection<string> wrongChars)
nel caso implementassi il metodo fammi sapere se ha funzionato.
Tnx![]()
Sarebbe importante sapere se hai a disposizione la frase corretta.Originariamente inviato da eziogsv
fondamentalmente voglio registrare QUANTI errori fa un OCR durante una sequenza di un centinaio di letture di una stessa frase, e QUALI LETTERE sbaglia a leggere (o toglie/aggiunge).
Intendo dire che una cosa è confrontare ogni lettura con un testo di riferimento corretto, per "misurare" l'affidabilità del lettore; altra cosa è confrontare le varie letture tra di loro, al fine di risalire alla frase corretta basandosi su criteri statistici e di conbergenza.
Nel primo caso, più semplice, potresti provare ad implementare un algoritmo che "marca", nelle due frasi, tutti i caratteri che sono presenti in ambedue le frasi e nella stessa sequenza. Alla fine, i caratteri "non marcati" nell'una e nell'altra frase sarebbero già una buona base per trarre delle conclusioni.
fatto... molto artigianale probabilmente, ma funge
dunque, la frase originale la ho sicuramente: è quella che viene scansita dall' OCR
il codice parte dal concetto che la scansione produce normalmente due errori:
1) viene letta una lettera per un altra
2) una lettera viene presa per due lettere (o per una lettera e uno spazio)
molto più raramente una lettera non viene letta, o viene scambiata per uno spazio
partendo da queste considerazioni, che semplificano di molto il lavoro, ecco il codice:
Report() mi dice la lettera diversa e la sua posizione, counter quanti errori in totalecodice:Dim DD As String = "casa mia è bella" 'il testo originale, noto Dim EE As String = "casta mea è belfa" 'il testo letto dall' OCR Dim Longer, Shorter As String Dim counter As Short = 0 If DD.Length > EE.Length Then Longer = DD.Replace(" ", "") Shorter = EE.Replace(" ", "") Else Longer = EE.Replace(" ", "") Shorter = DD.Replace(" ", "") End If Dim Report(Shorter.Length - 1) As String For W As Short = 0 To Shorter.Length - 1 If Shorter.Substring(W, 1) = Longer.Substring(W, 1) Then GoTo 5 Report(W) = Longer.Substring(W, 1) counter = counter + 1 If Shorter.Length = Longer.Length Then GoTo 5 Longer = Longer.Remove(W, 1) If Shorter.Substring(W, 1) = Longer.Substring(W, 1) Then GoTo 5 Report(W) = Longer.Substring(W, 1) counter = counter + 1 5: Next