es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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,>

Tags:  , ,

Answer

  1. Avatar for 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:

    public string combinations2(string date, int startPosition, Dictionary<char, string[]=""> dictionary)
    {
        Console.WriteLine("Llamando a la función " + date + ", " + startPosition);
        if (string.Join("", date).Equals("250415")) //necesitas calcular la suma de comprobación
        {
            Console.WriteLine("Encontrado: " + date);
            return date;
        }
        if (startPosition >= date.Length)
        {
            Console.WriteLine("No encontrado: ");
            return "";
        }
    
        string result = "";
        if (dictionary.ContainsKey(date.ToCharArray()[startPosition]))
        {
            foreach (var value in dictionary[date.ToCharArray()[startPosition]])
            {
                string newDate = date.Remove(startPosition, 1).Insert(startPosition, value);
                string r = combinations2(newDate, startPosition, dictionary);
                if (r != "")
                {
                    result = r;
                    break;
                }
            }
        }
        else
        {
            result = combinations2(date, startPosition + 1, dictionary);
        }
    
        if (result == "")
        {
            result = combinations2(date, startPosition + 1, dictionary);
        }
    
        return result;
    }
    

    Esto debería iterar correctamente a través de todas las posibles combinaciones de reemplazos hasta que encuentre la palabra correcta.</char,>

Comments are closed.