No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

1D
18H
10M
41S

Tokenizacion con Expresiones Regulares

6/24
Recursos

Aportes 23

Preguntas 5

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Les dejo el patr贸n visto en clase, con explicaciones en espa帽ol que hice 馃槃

pattern = r'''(?x)                  # Flag para iniciar el modo verbose
              (?:[A-Z]\.)+            # Hace match con abreviaciones como U.S.A.
              | \w+(?:-\w+)*         # Hace match con palabras que pueden tener un gui贸n interno
              | \$?\d+(?:\.\d+)?%?  # Hace match con dinero o porcentajes como $15.5 o 100%
              | \.\.\.              # Hace match con puntos suspensivos
              | [][.,;"'?():-_`]    # Hace match con signos de puntuaci贸n
'''
texto = """ Cuando sea el rey del mundo (imaginaba 茅l en su cabeza) no tendr茅 que  preocuparme por estas bobadas. 
            Era solo un ni帽o de 7 a帽os, pero pensaba que podr铆a ser cualquier cosa que su imaginaci贸n le permitiera 
            visualizar en su cabeza ...""" 

En lugar de usar [\t\n]+ para definir un rango de espacios, tabs, etc. pueden usar el metacaracter \s, espec铆ficamente dise帽ado para reconocer diferentes clases de espacios 馃槈

El metacaracter \W lo que hace es hacer match con todo lo que no sea un caracter alfanum茅rico (como par茅ntesis, s铆mbolos raros, etc.)

M谩s o menos as铆 me sent铆 en el minuto 8:20

Normalizaci贸n de texto (como aplicaci贸n de las expresiones regulares)

# Imprimimos el texto con un salto de linea
print('esta es \n una prueba')

# Forzamos a Python a que nos imprima el texto como texto plano a pesar de los caracteres especiales como el salto de linea. 
print(r'esta es \n una prueba')

Tokenizaci贸n: Es el proceso mediante el cual se sub-divide una cadena de texto en unidades ling眉铆sticas m铆nimas (palabras)

# Ejemplo: 

texto = """ Cuando sea el rey del mundo (imaginaba 茅l en su cabeza) no tendr茅 que  preocuparme por estas bobadas. 
            Era solo un ni帽o de 7 a帽os, pero pensaba que podr铆a ser cualquier cosa que su imaginaci贸n le permitiera 
            visualizar en su cabeza ...""" 
# Caso 1: Tokenizar por espacios vac铆os
print(re.split(r' ',texto))
# Caso 2: Tokenizar usado expresiones regulares usando regex
print(re.split(r'[ \t\n]+', texto))
# Caso 3: Usando el par谩metro W
print(re.split(r'[ \W\t\n]+', texto))

Tokenizando con NLTK

texto = 'En los E.U. esa postal vale $15.50 ...'
print(re.split(r'[ \W\t\n]+', texto))

pattern = r'''(?x)                  # Flag para iniciar el modo verbose
              (?:[A-Z]\.)+            # Hace match con abreviaciones como U.S.A.
              | \w+(?:-\w+)*         # Hace match con palabras que pueden tener un gui贸n interno
              | \$?\d+(?:\.\d+)?%?  # Hace match con dinero o porcentajes como $15.5 o 100%
              | \.\.\.              # Hace match con puntos suspensivos
              | [][.,;"'?():-_`]    # Hace match con signos de puntuaci贸n
              '''
nltk.regexp_tokenize(texto, pattern)
texto = 'En los E.U. esa postal vale $15.50 ...'

Alli les dejo un enlace con todas las funciones de NLTK:
https://tedboy.github.io/nlps/generated/nltk.html

Excelente clase!.
Creo que cabe aclarar que la primer expresi贸n regular 鈥[ \W\t\n]+鈥 se enfocaba en buscar:

  • espacios.
  • espacios de TAB
  • finales de linea y caracteres que no fuesen palabras, n煤meros o puntos.
    Y dividir en donde hiciera match.
    Pero la segunda expresi贸n regular 鈥(?x) ...鈥 se enfocaba hacer match con la palabras, frases y/o expresiones.

Diablos, ahora otro curso a la lista de pendientes鈥 Por qu茅 eleg铆 esta carrera? Jaja!

Tokenizaci贸n con expresiones regulares

Python no interpreta el texto raw por defecto, si no que admite cosas espciales como tabs con \t o enters con \n. Podemos indicarle que lea solo raw:

print('Esta es \n una prueba')
print(r'Esta es \n otra prueba')

Tokenizaci贸n: Es el proceso mediante el cual se sub-divide una cadena de texto en unidades lingu铆sticas minimas (palabras)

texto = """ Cuando sea el rey del mundo (imaginaba 茅l en su cabeza) no tendr茅 que  preocuparme por estas bobadas.
						Era solo un ni帽o de 7 a帽os, pero pensaba que podr铆a ser cualquier cosa que su imaginaci贸n le permitiera
						visualizar en su cabeza ..."""

Caso 1: Tokenizar por espacios vac铆os. Aqu铆 hay ruido, caracteres que no son parte de las palabras y queremos remover.

print(re.split(r' ', texto))

Caso 2: Tokenizador usando expresiones regulares

print(re.split(r'[ \W\t\n]+', texto))

Tokenizador de NLTK

Si usamos lo anterior, nos ignora abreviaciones, precios, como esto:

texto = 'En los E.U. esa postal vale $15.50 ...'
print(re.split('[ \W\t\n]+', texto))

Para poder considerar esto, debemos usar expresiones regulares mucho m谩s complejas, como esta:

pattern = r'''(?x)                  # Flag para iniciar el modo verbose
						(?:[A-Z]\.)+          # Hace match con abreviaciones como U.S.A.
						| \w+(?:-\w+)*        # Hace match con palabras que pueden tener un gui贸n interno
						| \$?\d+(?:\.\d+)?%?  # Hace match con dinero o porcentajes como $15.5 o 100%
						| \.\.\.              # Hace match con puntos suspensivos
						| [][.,;"'?():-_`]    # Hace match con signos de puntuaci贸n
						'''

nltk.regexp_tokenize(texto, pattern)

Esta linea:

| \.\.\. 

Puede ser represantado de la siguiente forma:

| \.{3,3}

Tambien se podria hacer asi:

print(re.split(r'[\b\W+\b]+', texto))

NLTK puede tokenizar por palabras directamente el 煤tlimo ejemplo (el que tiene trampas para el regex).

nltk.tokenize.word_tokenize(texto, language="Spanish", preserve_line=True)

Me parece mucho m谩s limpio que definir esa regex que no cubre todos los casos.

Tokenizador avanzado

import re
with open('texto_rey.txt', 'r', encoding =  'utf-8') as f:
    flatten = (re.findall(r',+|\.+|\w+|\(.+ ?\)', f.read()))
    print(flatten)

la subo antes de ver el ejercicio, mi m茅todo: Primero busqu茅 literalmente la frase entre par茅ntesis abstrayendo cada elemento y as铆 sucesivamente con el 鈥榦鈥 inclusivo.

ER para reconocer caracteres muy especiales

No se s铆 notaron pero con el texto inical la tokenizaci贸n deja los parentesis como parte del arreglo. Digo por si acaso. 馃槈

Un sitio web con un repositorio de patrones regex (Regex Repository)

https://owasp.org/www-community/OWASP_Validation_Regex_Repository

Cual es el link de los notebooks?

por favor compartan los .ipynb correspondientes a cada clase

Buen curso

驴C贸mo podr铆a buscar **KEY: VALUE ** con una expresi贸n regular en un invoice?