Entonces tengo una cadena, y dentro de esa cadena, ciertos caracteres en ciertas palabras se reemplazan con otros ( typo_text ). Por ejemplo: "EE. UU., Alemania, la Comisión Europea, Japón y Canadá para financiar el desarrollo y la implementación equitativa de las pruebas". Este sería el formato correcto, pero en su lugar me dan, "XSX, Gxrmxny, la Comisión Europea, Jxpxn y Cxnxdx para financiar el desarrollo y la implementación equitativa de las pruebas, tratamientos y vacunas necesarias para terminar la fase aguda de la COVID". -19 pandemia He estado creando un script que necesita bucles for corregir los errores tipográficos:
def corrected_text(text): newstring="" for i in text: if i not in "aeiouAEIOU": newstring=newstring+i text=newstring return text Sé que cuando ejecuto esto, solo elimina todas las vocales del texto. Sin embargo, parece ser un paso en la dirección correcta para ayudar a corregir los errores tipográficos y tener una idea de un enfoque basado en bucles for .
Tengo dos listas de palabras que tienen este problema:
name_G7_countries = ['Canada', 'France', 'Germany', 'Italy', 'Japan', 'UK', 'USA'] mistake = ['Cxnxdx', 'Frxncx', 'Gxrmxny', 'Xtxly', 'Jxpxn','XK', 'XSX'] Sé que usar algo como 'Jxpxn'.replace('x', 'a') puede funcionar; sin embargo, para otras frases, puede que no, así que no estoy seguro de cómo proceder desde aquí.
Puedes intentar hacerlo usando expresiones regulares.
Queremos ejecutar en las dos listas, y luego reemplazar cada x con ^[aeiou] y X con ^[AEIOU] (que significa "coincidir con cualquiera de aeiou, o en el caso de la X mayúscula, AEIOU") para la expresión regular, y después de eso reemplazamos todas las palabras que coinciden con ese patrón, con las palabras originales.
import re name_G7_countries = ['Canada', 'France', 'Germany', 'Italy', 'Japan', 'UK', 'USA'] mistake = ['Cxnxdx', 'Frxncx', 'Gxrmxny', 'Xtxly', 'Jxpxn','XK', 'XSX'] def corrected_text(text): for original, m in zip(name_G7_countries, mistake): m = m.replace('x', '[aeiou]').replace('X', '[AEIOU]') text = re.sub(m, original, text) return textEntonces, por ejemplo, convertimos 'Xtxly' en '[AEIOU]t[aeiou]ly', por lo que hacemos coincidir cada palabra que comienza con una vocal mayúscula, una 't' después, una vocal minúscula y después 'ly'. y reemplácelo con 'Italia'.
Cree una tabla de búsqueda, donde las claves son los nombres de los países a los que se les quitaron las vocales y los valores son los nombres reales de los países.
Luego, puede buscar países en esta tabla eliminando las X en los datos corruptos.
name_G7_countries = ['Canada', 'France', 'Germany', 'Italy', 'Japan', 'UK', 'USA'] mistake = ['Cxnxdx', 'Frxncx', 'Gxrmxny', 'Xtxly', 'Jxpxn','XK', 'XSX'] def remove_letters(s, letters_to_remove): return ''.join(filter(lambda x: x not in letters_to_remove, s)) country_lookup_table = {remove_letters(s, "AEIOUaeiou"): s for s in name_G7_countries} result = [country_lookup_table[remove_letters(mistake_country, 'Xx')] for mistake_country in mistake] # Prints ['Canada', 'France', 'Germany', 'Italy', 'Japan', 'UK', 'USA'] print(result) Tenga en cuenta que usamos ''.join() en lugar de la concatenación repetida para la función remove_letters() por razones de eficiencia .