TRE es una biblioteca de código abierto para la coincidencia de patrones en texto, [2] que funciona como un motor de expresiones regulares con la capacidad de realizar una coincidencia aproximada de cadenas . [3] Fue desarrollado por Ville Laurikari [1] y se distribuye bajo una licencia similar a BSD de 2 cláusulas .
La biblioteca [4] está escrita en C y proporciona funciones que permiten utilizar expresiones regulares para realizar búsquedas en las líneas de texto de entrada. La principal diferencia con otros motores de expresiones regulares es que TRE puede hacer coincidir fragmentos de texto de manera aproximada, es decir, suponiendo que el texto podría tener cierta cantidad de errores tipográficos .
TRE utiliza una sintaxis de expresión regular extendida con la adición de "instrucciones" para hacer coincidir el fragmento anterior de manera aproximada. Cada una de estas instrucciones especifica cuántos errores tipográficos se permiten para este fragmento.
La correspondencia aproximada [5] se realiza de manera similar a la distancia de Levenshtein , lo que significa que hay tres tipos de errores tipográficos "reconocidos": [6]
TRE permite especificar el costo de cada uno de los tres tipos de errores tipográficos de forma independiente.
El proyecto viene con una utilidad de línea de comandos, una reimplementación de agrep .
Aunque la coincidencia aproximada requiere cierta extensión de sintaxis, cuando no se utiliza esta función, TRE funciona como la mayoría de los demás motores de coincidencia de expresiones regulares. Esto significa que
El autor de la biblioteca afirma [8] que el tiempo empleado en la coincidencia crece linealmente con el aumento de la longitud del texto de entrada, mientras que el requisito de memoria es constante durante la coincidencia y no depende de la entrada, solo del patrón.
Otras características comunes a la mayoría de los motores de expresiones regulares se pueden consultar en las tablas de comparación de motores de expresiones regulares o en la lista de características de TRE en su página web.
Las direcciones de coincidencia aproximadas se especifican entre llaves y deben distinguirse de los cuantificadores repetitivos (posiblemente insertando un espacio después del corchete de apertura):
(regular){~1}\s+(expression){~2}
coincidiría con variantes de la frase "expresión regular" en las que "regular" no tiene más de un error tipográfico y "expresión" no más de dos; como en las expresiones regulares ordinarias " \s+
" significa uno o más caracteres de espacio, es decirexpresión rogular
(expression){ 5i + 3d + 2s < 11}
coincidiría con la palabra "expresión" si el costo total de errores tipográficos es menor a 11, mientras que el costo de inserción se establece en 5, la eliminación en 3 y la sustitución de caracteres en 2, es decir, ekspresson
da un costo de 10.Además de C, TRE se puede utilizar a través de enlaces para Perl , Python y Haskell . [9] Es el motor de expresiones regulares predeterminado en R. [10] Sin embargo, si el proyecto fuera multiplataforma , sería necesaria una interfaz separada para cada una de las plataformas de destino.
Dado que otros motores de expresiones regulares no suelen ofrecer una capacidad de coincidencia aproximada, prácticamente no existe una implementación concurrente con la que se pueda comparar TRE. Sin embargo, hay algunas cosas que los programadores podrían desear ver implementadas en futuras versiones: [11]
mejoras prácticas .. Algoritmo de Lurikari, en particular ..