Saltar al contenido

Procesamiento del Lenguaje Natural – Análisis de texto

re.findall()

El método re.findall() devuelve todos los patrones de la cadena. En caso de no haber coincidencia, se devuelve una lista vacía.

La primera línea del código a continuación extrae números del texto, $0027regex_example$0027, que creamos anteriormente.

Procesamiento del Lenguaje Natural – Análisis de texto
Procesamiento del Lenguaje Natural – Análisis de texto

Ahora trabajaremos con las palabras y trataremos de encontrar el número de vocales en el texto. La segunda y tercera línea del código realizan esta tarea. Hay 87 ocurrencias de vocales en el texto.

Supongamos que quieres encontrar el número de veces que la palabra “Vengadores” fue usada en el corpus. Esto se logra con la cuarta línea del código y la respuesta es 2.

También podemos encontrar todas las palabras en mayúsculas e imprimir el resultado, que se hace en quinta y sexta líneas del código. El resultado sólo contiene las palabras en mayúsculas del corpus.

123456789print(re.findall($0027d+$0027, regex_example))#línea1 vocales = re.findall($0027[aeiou]$0027, regex_ejemplo)#línea2print(len(vocales))#línea 3print(len(re. findall($0027Avengers$0027, ejemplo_regex)))#línea 4 palabras mayúsculas ="[A-Z]w+"#línea 5print(re.findall(palabras mayúsculas, ejemplo_regex))#línea 6

pitón

Salida:

1234[$00272018$0027, $002719$0027, $0027149$0027, $00272$0027]872[$0027Vengadores$0027, $0027Infinito$0027, $0027Guerra$0027, $0027Americano$0027, $0027Maravilla$0027, $0027Cómics$0027, $0027Vengadores$0027, $0027Eso$0027, $0027Maravilla$0027, $0027Cinemático$0027, $0027Universo$0027, $0027MCU$0027, $0027El$0027, $0027Fuente$0027, $0027Wikipedia$0027]

re.split()

El otro método útil es re.split(), que divide la cadena en caso de coincidencia. En caso de no haber coincidencia, devuelve una lista que contiene una cadena de caracteres vacía.

En nuestro ejemplo, apliquemos este método y dividamos el corpus con un patrón de números. El siguiente trozo de código hace esta tarea e imprime la salida.

1print(re.split(r"d+", regex_example))

pitón

Salida:

1$0027Avengers: Infinity War fue una película de superhéroes americanos basada en el equipo de superhéroes de Marvel Comics, los Vengadores. Es la película más importante del universo cinematográfico de Marvel (MCU). El tiempo de duración de la película fue de minutos y la recaudación de la taquilla fue de alrededor de mil millones de dólares. (Fuente: Wikipedia)

La salida anterior muestra que la división se hizo en dígitos. Es posible añadir el argumento "maxsplit" al método re.split(), que indica el número máximo de divisiones que se producirán. El valor por defecto es cero. El código que se muestra a continuación utiliza el valor maxsplit como 2, y el método sólo se divide para las primeras ocurrencias de dígitos.

1print(re.split(r"d+", regex_example,2))

pitón

Salida:

1$0027Avengers: Infinity War fue una película de superhéroes americanos basada en el equipo de superhéroes de Marvel Comics, los Vengadores. Es la película más importante del universo cinematográfico de Marvel (MCU). El tiempo de duración de la película fue de 149 minutos y la recaudación de la taquilla fue de alrededor de 2 mil millones de dólares. (Fuente: Wikipedia)$0027

Otra aplicación sería dividir el corpus en espacios. Eso se logra con el siguiente código.

1print(re.split(r"s+", regex_example))

pitón

Salida: $0027Vengadores:$0027, $0027Infinito$0027, $0027Guerra$0027, $0027fue$0027, $0027a$0027, $00272018$0027, $0027Americano$0027, $0027superhéroe$0027, $0027película$0027, $0027basado en$0027, $0027el$0027, $0027Maravilla$0027, $0027Cómics$0027, $0027superhéroe$0027, $0027equipo$0027, $0027los$0027, $0027Vengadores$0027. "Es", "es", "el", "19", "película", "en", "la", "Marvel", "Cinemática", "Universo", "MCU". ", "El", "corriendo", "tiempo", "de", "la", "película", "fue", "149", "minutos", "y", "la", "caja", "oficina", "colección", "fue", "alrededor de", "2", "billones", "dólares", "(Fuente:", "Wikipedia)"

re.sub()

Este método se utiliza para sustituir el texto emparejado con el contenido de la variable de sustitución. Si no se encuentra el patrón, se devuelve la cadena original.

En nuestro ejemplo, sustituiremos la palabra "Vengadores" por la "A". El siguiente trozo de código hace esta tarea.

1print(re.sub("Avengers", "A", regex_example))

pitón

Salida:

1A: Infinity War fue una película de superhéroes americanos de 2018 basada en el equipo de superhéroes de Marvel Comics, el A. Es la 19ª película del Universo Cinematográfico de Marvel (MCU). El tiempo de duración de la película fue de 149 minutos y la recaudación de taquilla fue de alrededor de 2 mil millones de dólares. (Fuente: Wikipedia)

re.search()

Este método se utiliza para buscar el patrón en la cadena y devolver el objeto coincidente si tiene éxito. Si la búsqueda falla, devuelve None.

Entendamos esto en el siguiente ejemplo, donde intentaremos encontrar si la palabra $0027Python$0027 está al principio de la frase "Scikit Learn es una gran biblioteca de Python". En nuestro ejemplo, como la búsqueda falla, la salida es $0027None$0027.

123example ="Scikit Learn is a great Python library "match = re.search($0027APython$0027, example)print(match)

pitón

Salida: Ninguno

Las expresiones regulares son un área enorme y es imposible cubrirla toda en una sola guía. Sin embargo, tenemos una comprensión básica de los métodos de regex más utilizados y su funcionamiento en Python, que será útil en la mayoría de los casos. Pasemos ahora a otra importante técnica de análisis de texto llamada tokenización de palabras .