Introducción al Procesamiento de Lenguaje Natural
Introducción al Procesamiento de Lenguaje Natural
Evolución del NLP
Conceptos básicos de NLP
Fundamentos con NLTK
Configurar ambiente de trabajo
Palabras, textos y vocabularios
Tokenizacion con Expresiones Regulares
Estadísticas básicas del lenguaje
Distribuciónes de frecuencia de palabras
Refinamiento y visualización de cuerpos de texto
N-gramas y Colocaciones del lenguaje
¿Cómo extraer n-gramas de un texto en Python?
Colocaciones en Python
Colocaciones en gráficos de dispersión
Filtros y colocaciones en NLTK
Introducción a los recursos léxicos
Recursos léxicos en NLTK
NLTK para traducción de palabras
Introducción a WordNet
Explorando WordNet
Similitud Semantica con WordNet
Procesamiento de texto plano desde Web
Usando código estructurado: conexión de Drive a Google Colab
Usando código estructurado: Funciones externas
Perspectivas de lo que viene
Continúa con el Curso de Algoritmos de Clasificación de Texto
Create an account or log in
Keep learning for free! Join and start boosting your career
In the fascinating world of computational linguistics, regular expressions play a crucial role in performing advanced searches on large amounts of text, such as a corpus. If you are interested in discovering how to build effective search patterns, you are in the right place. In this guide, we unravel the use of regular expressions with the NLTK (Natural Language Toolkit) library and Python, from the basics to the most sophisticated patterns.
Regular expressions are sequences of characters that form a search pattern. Used in text processing, they allow you to navigate and filter information within text strings to find specific matches. Python has a powerful library called re
that makes it easy to incorporate them.
We start with the creation of an array using a simple regular expression. Next, we show how to define basic and advanced search patterns.
import re
# Basic example: Search for words containing 'en'AR = [w for w in flatten if re.search(r'en', w)].
In this code snippet, we use the re.search()
function from the Python regular expression library, specifying a pattern and evaluating each word in the flatten
list. If the pattern 'is' is found in a word, it is added to the new AR
array.
Metacharacters enrich regular expression searches by allowing more specificity, such as looking for matches at the beginning or end of words.
$: Marks the end of a string.
# Example: Only words ending in 'en'AR = [w for w in flatten if re.search(r'en$', w)].
^: Marks the beginning of a string.
# Example: Only words starting with 'es'AR = [w for w in flatten if re.search(r'^es', w)]^ : Marks the beginning of a string.
Ranges allow you to define a set of characters that can occupy a specific position within a text string:
# Example: search for words starting with 'g', 'h' or 'i'AR = [w for w in flatten if re.search(r'^[ghi]', w)]
In this example, we create an array where we filter words starting with a letter located between 'g' and 'i'. This is achieved by defining a range [ghi]
as the first character in the selected words in the array.
Closures specify the number of repetitions allowed for a given pattern:
*: Allows a pattern to repeat zero or more times.
# Example: Patterns that can appear zero or more timesAR = [w for w in flatten if re.search(r'^no*', w)]
+: Requires a pattern to be repeated at least once.
# Example: Patterns that must appear at least onceAR = [w for w in flatten if re.search(r'^no+', w)] +: Requires a pattern to appear at least once.
This is just the beginning! Regular expressions are an awesome tool for those passionate about computation and linguistic analysis. As you progress, you will be able to explore how to define tokenizers using these techniques, helping to structure text more efficiently. Feel free to experiment and keep practicing to master their use. Your journey into the field of natural language processing will be incredibly enriching. Go for it!
Contributions 20
Questions 4
Definicion de metacaracter: Es una subcadena de texto que define un patron de busqueda muy basico. En el ejemplo tenemos:
re.search('es')
En donde nos trae todas las cadenas de texto que contengan en alguna parte la subcadena ‘es’.
En las expresiones regulares podemos tener busquedas al inicio o al final.
Al inicio seria
re.search('es$')
Al final quedaria como:
re.search('^es')
El rango como su nombre lo indica es una expresion regular que nos da como resultado las cadenas que tengan a inicio o final lo contenido en dicho rango. Ejemplo:
re.search('^[ghi]')
Clausura:
Existen 2 tipos:
La función re.search(p, s) tiene dos parámetros. En p introducimos la expresión que queremos buscar y en s la “lista” en la que queremos buscar la expresión p.
También se puede hacer uno de un filtro así:
import nltk
from re import match
import functools
import operator
nltk.download('cess_esp')
corpus = nltk.corpus.cess_esp.sents()
flatten = functools.reduce(operator.iconcat, corpus, [])
filtered_values = list(filter(lambda w: match('^[afc]', w), flatten))
filtered_values[:10]
Esta función determina si el patrón de la expresión regular aplica en una cadena de texto, re.searhc(p, s)
arr = [word for word in flatten if re.search('es',word)]
print(arr[:7])
Podemos ver que todos los elementos tienen dentro el texto es.🤯 Este es es un metacaracter que define un patrón de búsqueda muy básico. Podemos crear patrónes de busqueda mucho más complejos.
arr = [word for word in flatten if re.search('es$', word)]
print(arr[:5])
arr = [word for word in flatten if re.search('^es', word)]
print(arr[:5])
Ahora veremos que es el rango. La notación es [a-z], [ghi]. Cualquier letra en ese rango puede estar en dicho lugar
arr = [word for word in flatten if re.search('^[ghi]', word)]
print(arr[:7])
Por último, tenemos clausuras, y hay dos tipos:
*
: Una cadena de texto se puede repetir 0 o más veces.+
: La cadena se puede repetir 1 o más veces.arr = [word for word in flatten if re.search('^(no)+', word)]
print(arr[:10])
Que es ?
Esta funcion determmina el patron de busqueeda dee caracteres; p es la cadena a buscar y s es el arreglo de donde se sacara la informacion
re.search(p,s)
Estructura
arr = [w for w in flatten if re.search("es", w)]
print(arr[:10])
entrega
['estatal', 'jueves', 'empresa', 'centrales', 'francesa', 'japonesa', 'millones', 'millones', 'dólares', 'millones']
arr = [w for w in flatten if re.search("es$", w)]
print(arr[:10])
entrega
['jueves', 'centrales', 'millones', 'millones', 'dólares', 'millones', 'millones', 'dólares', 'es', 'militantes']
arr = [w for w in flatten if re.search("^es", w)]
print(arr[:10])
entrega
['estatal', 'es', 'esta', 'esta', 'eso', 'es', 'especial', 'especialmente', 'este', 'estas']
Rango
Con el rango podemos hacer un filtrado mayor, dato que tenemos varios caracteres en los que podemos buscar, el rango se escribe dentro de [ ]
arr = [w for w in flatten if re.search("^[ghi]", w)]
print(arr[:10])
entrega
['grupo', 'hoy', 'gas', 'gas', 'intervendrá', 'invertir', 'gas', 'hoy', 'insulto', 'intervención']
Clausuras
Las clausuras nos ayudaran a delimitar la búsqueda por caracteres
*** repetirr 0 o mas veces**
+ repetir 1 o mas veces
con 0 repeticiones
arr = [w for w in flatten if re.search("^(no)*", w)]
print(arr[:1
entrega
['El', 'grupo', 'estatal', 'Electricité_de_France', '-Fpa-', 'EDF', '-Fpt-', 'anunció', 'hoy', ',']
con 1 o mas repeticiones
arr = [w for w in flatten if re.search("^(no)+", w)]
print(arr[:10])
entrega
['norte', 'no', 'no', 'noche', 'no', 'no', 'notificación', 'no', 'no', 'no']
Esta funcion determina si el patron de búsqueda p está contenido en la cadena s
re.search(p, s)
# Buscamos el 'es' en la cadena w en donde este
arr = [w for w in flatten if re.search('es', w)]
print(arr[:5])
# Buscamos el 'es' en la cadena w al final
arr = [w for w in flatten if re.search('es$', w)]
print(arr[:5])
# Buscamos el 'es' en la cadena w al principio
arr = [w for w in flatten if re.search('^es', w)]
print(arr[:5])
Ejemplos:
# Buscamos que al principio de tu cadena de texto debe de ser entre la g, h y la i
arr = [w for w in flatten if re.search('^[ghi]', w)]
print(arr[:10])
# El patron de busqueda será que al principio aparezca no y que esa secuencia se puede repetir 0 o más veces
arr1 = [w for w in flatten if re.search('^(no)*', w)]
print(arr1[:20])
# El patron de busqueda será que la sub cadena de texto no debe de aparecer al menos una vez
arr2 = [w for w in flatten if re.search('^(no)+', w)]
print(arr2[:20])
No entiendo porque Francisco dice “0 o mas veces”. Si es cero no hay mas veces.
Alguien tiene una explicación de porque utiliza esa expresión.
Gracias
Este curso me gusta mucho es sobre python.
https://www.sololearn.com/learning/1073
Es FREE, en el ahi un modulo que es sobre expresiones regulares. Se los recomiendo.
Muy buena clase, si puedes tomar el curso de expresiones regulares del profesor Beco estos dos cursos seran una combinación potente en tu stack
Les recomiendo utilizar el método .compile()
de la líbreria re
en python, ya que nos brinda resultados más rápidos generalmente.
Aquí un pequeño test.
Usando solo expr.match
como filtro sin la expresion lambda se obtienen mejores resultados.
print([re.findall(r'\w*es', line) for line in flatten if re.search(r'es$', line)][:5])
print([re.findall(r'\w*es$', line) for line in flatten][:208])
Me pareció raro el código del profe porque pidas el patrón que pidas siempre te da la palabra entera que contiene la cadena, pero con este código puedes comprender el patrón que pides y lo que se está mostrando en pantalla, que es otro patrón.
La segunda función print() te ayudará a comprender el comportamiento del objeto flatten que es un iterador. Además puedes intercambiar entre: search, findall indistintamente así como los slices. Y por supuesto que los patrones y verás su comportamiento y naturaleza.
Ya me voy dando idea para trabajar con mi propia fuente y crear base de datos con el arreglo
Clausuras en expresiones regulares
Hola:
Pueden poner los patrones de texto para insertarlos en Google Colab y así poder practicar sin tener que escribirlos?. Me da un error cuando escribo las instrucciones
En algún momento encontré este simulador y me ayudó en el curso de Expresiones Regulares.
Buena explicación de expresiones regulares, lo básico, pero necesario para poder entenderlas.
Recordando el curso Autómatas y Lenguajes Formales.
Want to see more contributions, questions and answers from the community?