NLP y el Uso de Expresiones Regulares

El procesamiento de lenguaje natural es un área sumamente complicada del aprendizaje máquina, del procesamiento estadístico de datos y de la linguística. Para lo cual se han utilizado técnicas desde el conteo de letras, hasta el desarrollo de complejas redes neuronales.

Una de las técnicas básicas para el procesamiento de lenguaje es el uso de expresiones regulares. Una expresión regular es una cadena de caracteres que describe un patrón. El concepto de las expresiones regulares fue desarrollado por Christopher Kleene junto con el de lenguaje regular. Su uso se extendió en la programación mediante las utilidades del sistema Unix en los 60’s y 70’s.

Formalmente los procesadores de expresiones regulares son descritos por la teoría de autómatas, en ella el autómata consume los símbolos del texto y los resultados pueden ser actuar (capturar el símbolo) o no. Idealmente el procesamiento debe hacerse por Autómatas deterministas, o corremos el riesgo de que el autómata nunca acabe de procesar el texto.

Las expresiones regulares describen los patrones que queremos que sean “capturados” a continuación veremos los tipos de patrones mas simples:

Una expresión rtegular entonces, es una manera de describir un patrón para buscar coincidencias en una cadena de texto. Las expresiones regulares pueden servir para resolver los siguientes problemas:

  1. Buscar un patrón
  2. Extraer una subcadena
  3. Reemplazar una subcadena

Una de mis librerías favoritas de expresiones regulares es RE2 la cual fue creada en Google y es utilizada también por Golang. Una de las características determinantes de RE2 es que no permite el uso de back-reference, las cuales no pueden ser implementadas eficientemente y en algunos casos pueden llegar a tener un comportamiento exponencial tanto en procesamiento como en memoria.

Referencia de sintaxis de RE2

Single characters:

Composites:

Repetitions:

Implementation restriction: The counting forms «x{n,m}», «x{n,}», and «x{n}» reject forms that create a minimum or maximum repetition count above 1000. Unlimited repetitions are not subject to this restriction.

Possessive repetitions:

Grouping:

Flags:

Empty strings:

Escape sequences:

Character class elements:

Named character classes as character class elements:

Perl character classes (all ASCII-only):

ASCII character classes: