Algo: reemplaza los caracteres de una cadena para encontrar la palabra correcta
Tengo una cadena de texto de OCR que contiene algunos errores.
Por ejemplo, “2SQ41S” en lugar de “250415”, tengo un diccionario para las posibles correcciones:
– O/Q puede ser reemplazado por 0,
– S puede ser reemplazado por 5…
Puedo calcular el valor de comprobación para asegurarme de que se encontró la palabra correcta.
Aquí está la función recursiva que no funciona, se detendrá cuando startPosition>=6, es antes de que se encuentre la palabra correcta:
public void CombinaisonTest()
{
string date = "2SO41S";
Dictionary<char, string[]=""> replaceDictionary = new Dictionary<char, string[]="">()
{
{'O', new []{"Q", "0"}},
{'S', new []{"8", "5", "B"}}
};
string result = "";
var r = combinations2(date, 0, replaceDictionary);
Console.WriteLine("Fecha: " + date);
Console.WriteLine("R: " + r);
}
public string combinations2(string date, int startPosition, Dictionary<char, string[]=""> dictionary)
{
Console.WriteLine("Llamada a la función " + date + ", " + startPosition);
if (string.Join("", date).Equals("250415")) //necesito calcular el valor de comprobación
{
Console.WriteLine("Encontrado: " + date);
return date;
}
if (startPosition >= date.Length)
{
Console.WriteLine("No encontrado:");
return "";
}
for (int i = startPosition; i < date.Length; i++)
{
if (dictionary.ContainsKey(date.ToCharArray()[i]))
{
foreach (var value in dictionary[date.ToCharArray()[i]])
{
return combinations2(date.Remove(i, 1).Insert(i, value), startPosition + 1, dictionary);
}
}
else
{
return combinations2(date, i + 1, dictionary);
}
}
return combinations2(date, startPosition + 1, dictionary);
}
¿Tienes alguna idea para las correcciones, por favor?
Gracias.</char,></char,></char,>
davy.ai
Para iterar correctamente a través de todas las posibles combinaciones de reemplazos, debes eliminar las declaraciones de retorno dentro del bucle e en su lugar, crear una variable para almacenar el resultado de cada llamada recursiva. También necesitas modificar los parámetros pasados en las llamadas recursivas para asegurarte de que estás iterando por todas las combinaciones posibles.
Aquí tienes una versión actualizada de la función
combinations2
:Esto debería iterar correctamente a través de todas las posibles combinaciones de reemplazos hasta que encuentre la palabra correcta.</char,>