quick - regex syntax
Errores ortográficos en Regex (6)
En los días que a veces utilizamos Soundex () para estos problemas.
Tengo una expresión regular creada a partir de una lista en una base de datos para unir los nombres de los tipos de edificios en un juego. El problema son los errores tipográficos, a veces las instrucciones de escritura para su equipo en el juego escribirán mal el nombre de un edificio y, obviamente, la expresión regular no lo recogerá (es decir, deletreando "Universidad" y "Unidad").
¿Hay alguna sugerencia sobre cómo hacer una ortografía regex con una o dos letras?
La expresión regular se genera dinámicamente y se ejecuta en una máquina local que puede manejar mucha más carga, así que tengo como último recurso crear algorítmicamente versiones de cada palabra con una letra faltante y luego otra con letras agregadas.
Estoy usando PHP, pero espero que cualquier solución a este problema no sea específica de PHP.
Esto podría ser excesivo, pero Peter Norvig de Google ha escrito un excelente artículo sobre cómo escribir un corrector ortográfico en Python. Definitivamente vale la pena leerlo y podría aplicarse a su caso.
Al final del artículo, él también enumeró implementaciones contribuidas del algoritmo en varios otros idiomas.
Permítanme presentarles la Distancia de Levenshtein , una medida de la diferencia entre cadenas como la cantidad de transformaciones necesarias para convertir una cadena en la otra.
También está integrado en PHP .
Por lo tanto, dividiría el archivo de entrada por caracteres que no sean palabras, y mediría la distancia entre cada palabra y su lista de edificios objetivo. Si la distancia está por debajo de cierto umbral, supongamos que fue un error ortográfico.
Creo que tendrías más suerte de esta forma que tratar de crear expresiones regulares para cada caso especial.
¿Qué es Soundex ()? - Teifion (hace 28 minutos)
Un soundex es similar a la función levenshtein que Tríptico menciona. Es un medio de comparar cadenas. Ver: http://us3.php.net/soundex
También puedes mirar metaphone y similar_text. Hubiera puesto esto en un comentario pero todavía no tengo suficientes representantes para hacer eso. :RE
La implementación de Google de "quise decir" al mirar los resultados anteriores también podría ayudar:
Estás de suerte; la gente de algoritmos ha trabajado mucho en la coincidencia aproximada de expresiones regulares . La más antigua de estas herramientas probablemente agrep
desarrollada originalmente en la Universidad de Arizona y ahora está disponible en una versión de código abierto. Simplemente dile a agrep
cuántos errores estás dispuesto a tolerar y coincide desde allí. También puede coincidir con otros bloques de texto además de líneas . El enlace de arriba tiene enlaces a una versión más nueva, GPLed de agrep
y también una serie de bibliotecas específicas del lenguaje para la coincidencia aproximada de expresiones regulares.