<jupyter_start><jupyter_text>Importamos la libreria RE<jupyter_code>import re<jupyter_output><empty_output><jupyter_text>Para hacer pruebas y experimentos podemos utilizar el texto de la dirección: https://raw.githubusercontent.com/apimentelaUP/recursos/master/M%C3%A9xico_texto.txt<jupyter_code>import requests

url = 'https://raw.githubusercontent.com/apimentelaUP/recursos/master/M%C3%A9xico_texto.txt'
page = requests.get(url)
texto = page.text
texto<jupyter_output><empty_output><jupyter_text>Recordemos que las ER son texto, y siempre y cuando no se incluya ninguno de los caracteres especiales, el texto formará una expresión regular que va a coincidir consigo mismo, asi se forman las ER mas simples.Para declarar una expresión regular, vamos a usar la función `re.compile()`<jupyter_code>expresion_mexico = re.compile(r"México")<jupyter_output><empty_output><jupyter_text>OJO: Presten atención a esa `'r'` justo antes de abrir las comillas del texto de la expresión regular, son importantes.Esa `'r'` le indica a Python que ese texto va a contener caracteres especiales de expresión regular. Python tiene caracteres especiales propios, de los cuáles varios coinciden con los de ER. Por lo tanto, si se omite la `'r'`, Python y la librería `re` se podrían "pelear" por ver a quién le corresponde esos símbolos. Mejor usar la `'r'` para indicarle a Python que deje pasar el texto tal cual al intérprete de expresión regular. Para este caso en partícular no pasa nada, porque no hay tales símbolos, pero mejor hacerse la costumbre. Podemos comenzar a usar esa expresión regular compilada para un proceso muy simple, buscarlo dentro del texto<jupyter_code>busqueda = expresion_mexico.search(texto)

print(busqueda.group(0))<jupyter_output>México<jupyter_text>Y para sorpresa de nadie, lo que obtenemos es el mismo texto que queríamos buscar en primer lugar. Pero este ejemplo es importante para mostrar cómo se obtiene el resultado.Primero, la función `er.search()` recibe el texto donde se va a buscar la expresión regular compilada y devuelve un resultado de esa búsqueda.Para poder observar la salida, necesitamos usar la función `.group(0)`. Mas adelante veremos como trabajar con los grupos de las expresiones regulares, pero por ahora simplemente confíen en mi que esa es la forma de obtener el resultado. La función `er.search()` va a regresar únicamente la primer coincidencia que encuentre, si quieren encontrar todas, pueden usar la función `er.finditer()` para obtener un resultado iterable.<jupyter_code>busqueda = expresion_mexico.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México[...]<jupyter_text>El resultado será una lista con todas las apariciones de la palabra "México" en el texto. Cada uno de los resultados que regresa el iterador se comporta igual que el resultado de la función `er.search()`  Punto (`.`) Ahora podemos comenzar con los símbolos especiales de las expresiones regulares, comenzaremos por el punto: `.`<jupyter_code>expresion_punto = re.compile(r".")
busqueda = expresion_punto.finditer(texto)

contador = 0
for resultado in busqueda:
  print(resultado.group(0))
  contador += 1
  if contador >= 100 :
    break<jupyter_output><
d
o
c
 
i
d
=
"
1
8
3
0
"
 
u
r
l
=
"
h
t
t
p
s
:
/
/
e
s
.
w
i
k
i
p
e
d
i
a
.
o
r
g
/
w
i
k
i
?
c
u
r
i
d
=
1
8
3
0
"
 
t
i
t
l
e
=
"
M
é
x
i
c
o
"
>
M
é
x
i
c
o
M
é
x
i
c
o
 
(
)
,
 
o
f
i
c
i
a<jupyter_text>El punto es capaz de coincidir con cualquier caracter, el que sea, en el código puse un límite de 100 resultados para cortar la salida, de otra manera tendrán todo el texto, un caracter a la vez.Usarlo por sí mismo no tiene mucho sentido, pero tanto letras como símbolos se pueden usar en conjunto dentro de las expresiones regulares.<jupyter_code>expresion_punto = re.compile(r"M..ic.")
busqueda = expresion_punto.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>México
México
México
Mexica
México
México
México
México
México
México
México
México
México
Mexica
México
Mexica
Mejica
Mexica
Mexica
Mexica
Mexica
Mexica
Mexica
Mexica
México
México
México
México
México
México
México
México
México
México
México
México
Mexica
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
Mexica
México
México
México
México
México
México
Munici
México
México
Mexica
México
México
Mexica
México
Mexica
México
México
México
Mexica
México
Munici
México
México
México
México
México
México
México
México
México
México
México
México
Mexica
Mexica
México
México
Mexica
México
México
México
México
México
Mexica
México
México
México
Mexica
México
México
México
Mexica
México
Mexica
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
México
Mexica[...]<jupyter_text>Esta búsqueda nos dará direrentes coincidencias similares a "México", por ejemplo con y sin acento, escrito con 'j' o con una diferente terminación.  Repetidores En segundo lugar, veamos los símbolos repetidores: `+  *` . Ambos símbolos se usan DESPUES de UN caracter que se quiera repteir: `*` cualquier cantidad de veces (incluyendo cero veces); `+` para una o más veces.<jupyter_code>expresion_mas = re.compile(r".0+")
expresion_asterisco = re.compile(r".0*")

busqueda_mas = expresion_mas.finditer(texto)
busqueda_asterisco = expresion_asterisco.finditer(texto)

print("########## RESULTADOS MAS ########## ")
for resultado in busqueda_mas:
  print(resultado.group(0))

print("########## RESULTADOS ASTERISCO ########## ")
contador = 0
for resultado in busqueda_asterisco:
  print(resultado.group(0))
  contador += 1
  if contador >= 100 :
    break<jupyter_output>########## RESULTADOS MAS ########## 
30
30
30
20
 000
300
10
 0
10
 000
30
 000
9000
 000
8000
1000
10
500
500
500
200
200
900
900
900
300
20
300
40
300
80
10
20
90
90
10
20
20
40
50
60
70
2000
200
100
 000
20
10
20
200
20
20
20
20
500
10
70
20
70
80
2000
200
20
80
50
50
20
20
20
 0
30
10
90
40
20
50
30
50
40
10
20
1000
500
500
50
70
60
80
1000
3000
30
200
 000
10
90
 000
500
70
 000
200
20
20
10
30
10
20
 000
10
40
70
70
30
200
200
70
100
 000
70
 000
200
20
 000
200
200
 0
 0
200
600
700
200
20
10
20
80
 000
200
200
200
10
80
40
70
200
200
20
20
200
70
200
20
200
20
10
5000
20
 0
20
10
 0
 0
60
200
200
30
900
5000
200
50
200
 000
50
 000
400
20
200
200
 000
 000
 0
200
10000
40
 000
20
10
80
20
10
20
20
10
200
90
80
200
30
200
40
20
100
100
20
10
20
30
80
50
80
2000
20
2000
2000
90
60
50
20
90
80
50
200
20
10
40
 000
600
40
400
 000
10
10
20
 000
2000
100
20
80
20
20
,000
20
20
200
20
20
20
20
90
20
10
30
5000
 000
500
400
100
10
50
500
5000
5000
50
 000
 000
100
 000
400
500
20
10
[...]<jupyter_text>Nuevamente le puse un límite a la salida de la expresión regular, o de lo contrario tendremos el texto completo un caracter a la vez (casi). ¿Por qué? porque el punto coincide con cualquier cosa, y si no tiene un cero a su derecha, no importa (por el asterisco), aún así va a coincidir. Si, por el contrario, si tiene ceros a la derecha, entonces va a coincidir con todos los que pueda y habrá mas de un caracter a la salida.A diferencia de la primera expresión regular, en donde se requiere que exista al menos un cero, pero puede haber más. Es posible que busquemos que el elemento que se repite solo lo haga una cantidad específica de veces. Para esos casos, lo que se necesita son llaves: `{ }` . Dentro de las llaves se coloca el número de veces que se busca que se repita el caracter anterior. Tiene tres opciones: número fijo; rango o rango abierto (mínimo de veces).<jupyter_code># Se va a buscar mínimo 2 nueves, si se coloca un número después de la coma es un rango
#   y sin coma es una cantidad fija de repeticiones
expresion_llaves = re.compile(r".9{2,}.")
busqueda = expresion_llaves.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>1994
1994
1994
1997
1994
1994
1995
 990
1990
1995
1990
1993
1992
1994
1999;
1993
1990
1992
1992
1990
1994
1996
1992
1994
1992
1996<jupyter_text>Aquí también vale la pena hablar de otro símbolo similar: `?`. No es exactamente un repetidor ya que solo acepta 0 o 1 aparición, es decir, hace que un caracter sea opcional.<jupyter_code>expresion_interrogacion = re.compile(r"años?")
busqueda = expresion_interrogacion.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>año
años
años
años
año
año
año
año
año
año
años
año
año
año
año
año
año
año
años
año
año
año
año
año
año
año
años
año
año
año
años
años
año
año
año
año
años
años
años
año
año
años
años
años
año
año
año
años
año
años
año
año
año
año
año
años
años
años
años
año
año
año
años
año
años
años
año
año
año
año
año
año
año
año
años
año
año
años
año
años
años
año
años
año
años
año
años
años
año
año
años
años
año
año
año
año
año
año
año
años
año
año
año
año
año
año
años
año
años
años
año
año
año
año
año
año
años
año
años
años
años
años
años
años
año
años
años
año
año
año
año
año
años
años
año
año
año
años
años
años
año
año
año
año
año
año
año
año
año
año
años
años
año
año
años
años
años<jupyter_text>Posición Las expresiones regulares también tienen símbolos especiales para indicar posición, en particular podemos hablar del inicio y final del texto. La versión, en expresión regular, de las funciones `s.startswith()` y `s.endswith()`. Los símbolos son `^` y `$` respectivamente<jupyter_code># Es mejor manejar el texto segmentado para este experimento
segmentado = texto.split("\n")

expresion_inicio = re.compile(r"^......")
expresion_fin = re.compile(r"......$")

for segmento in segmentado:
  resultado_inicio = expresion_inicio.search(segmento)
  resultado_fin = expresion_fin.search(segmento)

  if resultado_inicio and resultado_fin:

    print(resultado_inicio.group(0))
    print(resultado_fin.group(0))

    print("############")<jupyter_output><doc i
xico">
############
México
México
############
México
eral).
############
El ter
 con .
############
México
mundo.
############
La pre
ítico.
############
Según 
undo. 
############
En tér
mundo,
############
México
micas.
############
El pri
ulos. 
############
Los do
ncia. 
############
Desde 
común.
############
El gen
canos.
############
"Méxic
forma:
############
Franci
tecas.
############
El ter
érica.
############
Los oa
uahua.
############
Los ha
. C.).
############
El ini
godón.
############
Los ol
ticas.
############
El cen
Venta.
############
La Ven
irlas.
############
El cen
iores.
############
Se pie
iapas.
############
El per
Tikal.
############
Las ci
rinos.
############
Teotih
teca).
############
Los ar
guras.
############
Los te
ellos.
############
Los te
ioses:
############
Se des
ernos.
############
En su 
icios.
############
Los ar
guras.
############
La ciu
Albán.
############
Teotih
cóatl.
############
La cul
 cero.
############
Habitó
 tres:
############
L[...]<jupyter_text>Si no segmentamos el texto, solamente vamos a obtener los primeros y últimos seis caracteres de todo el texto, de esta manera obtenermos los primeros y últimos de cada línea.  Miscelaneos Lamentablemente, los símbolos que quedan tienen todos efectos particulares y ya no los pude agrupar más. Pero vamos a empezar con uno que ya conocemos: `?`. Porque puede tener otro significado que el que vimos; el signo de interrogación puede ser usado junto con los símbolos repetidores y cambia su comportamiento.<jupyter_code>expresion_sinInterrogacion = re.compile(r"\(.*\)")
expresion_conInterrogacion = re.compile(r"\(.*?\)")

busqueda_sinInterrogacion = expresion_sinInterrogacion.finditer(texto)
busqueda_conInterrogacion = expresion_conInterrogacion.finditer(texto)

for resultado in busqueda_sinInterrogacion:
  print(resultado.group(0))

print('''
  ############
  ############
  ############
''')

for resultado in busqueda_conInterrogacion:
  print(resultado.group(0))<jupyter_output>(), oficialmente Estados Unidos Mexicanos, es un país soberano ubicado en la parte meridional de América del Norte con capital en la Ciudad de México. Políticamente es una república representativa, democrática, federal y laica, compuesta por 32 entidades federativas (31 estados y la capital federal)
(principalmente el segundo tercio)
(PIB) es la decimocuarta economía mundial y la undécima por (PPA)
(Capitanía General de Guatemala, Cuba, Florida, Puerto Rico y la parte española de la isla de Santo Domingo —hoy República Dominicana—), asumiendo con ello, que ese era el espacio geográfico sobre el cual se constituiría la nueva nación.Posteriormente el Decreto Constitucional para la Libertad de la América Mexicana del 22 de octubre de 1814 cambió dicha denominación, adaptándola con el término "México" (usado como adjetivo)
(Plan de Iguala y Tratados de Córdoba), usaron los dos términos antes mencionados (América Septentrional y América Mexicana)
(s. XVI) —quien es la fuente documental más [...]<jupyter_text>Matamos dos pajaros de un tiro, podemos analizar la diferencia entre una expresión codiciosa y una reacia; y además, observamos un uso de la diagonal invertida (`\`): Cancelar el efecto de los símbolos especiales.  ( ) Los paréntesis tienen exactamente el efecto que uno podría esperar: agrupar. Eso quiere decir que se puede aplicar instrucciones a mas de un caracter a la vez.<jupyter_code>expresion_parentesis = re.compile(r"(el)?(los)? país(es)?")
busqueda = expresion_parentesis.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>país
el país
el país
 país
el país
el país
 país
el país
los países
 países
 país
el país
el país
el país
el país
 país
el país
el país
el país
 país
el país
el país
 país
el país
el país
el país
el país
el país
el país
 país
el país
el país
el país
 país
 país
 país
el país
 países
el país
el país
 país
 países
el país
el país
el país
 país
el país
 país
el país
el país
el país
el país
el país
el país
el país
 países
 país
el país
el país
 países
 país
 país
el país
el país
el país
 país
el país
el país
el país
el país
el país
 país
 países
 país
los países
el país
el país
el país
los países
el país
 país
 países
el país
el país
 países
el país
el país
 países
el país
 países
 países
el país
el país
el país
el país
el país
el país
el país
el país
el país
 país
el país
 país
el país
los países
el país
el país
el país
el país
el país
el país
 país
el país
el país
 países
 países
 país
 país
el país
 país
 país
el país
 país
 países
 país
 país
 país
el país
 países
el país
el país
el p[...]<jupyter_text>| Podemos ver que el código anterior es mas o menos equivalente a buscar "el país" o "los países" o incluso solo "países". Pero con esa construcción, en realidad también se podrían encontrar cosas como "ellos países" si es que algo así estuviera en el texto.Afortunadamente las expresiones regulares cuentan con instrucción específica para lograr un OR.<jupyter_code>expresion_barra = re.compile(r"(el|los) país(es)?")
busqueda = expresion_barra.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>el país
el país
el país
el país
el país
los países
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
los países
el país
el país
el país
los países
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
los países
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
el país
los países
el país
el país
los países
los países
el país
el país
el país
el país
el país
el país
el [...]<jupyter_text>[ ] Los corchetes tienen la función de formar conjuntos de caracteres. Hasta ahora hemos usado punto (`.`) para cuando queremos acpetar más de un posible caracter. En expresiones como: `r"M..ic."` ; la naturaleza del texto provocó que solo se obtuvieran cosas relacionadas con México, pero fácilmente la expresión hubiera aceptado "Mítico" también. Para esos casos podemos tener conjuntos de caracteres restringidos que se pueden aceptar. Además, los conjuntos se pueden formar como rangos, o también pueden usarse como negación de conjuntos.<jupyter_code>expresion_corchetes = re.compile(r"[Mm].[xj]ic[^ \n]+")
busqueda = expresion_corchetes.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))
expresion_rango = re.compile(r"[0-9]+")
busqueda = expresion_rango.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>1830
1830
32
31
3155
958
276
9330
126
2019
67
287
14
000
300
1810
1821
0
774
74
17
10
12
12
000
6
1813
22
1814
28
1821
1824
1857
1917
30
000
9000
12
000
8000
1000
10
500
2500
1500
200
200
900
900
900
1300
1521
1517
1518
1520
13
1521
1525
1527
1535
300
1546
1540
1551
1734
1737
1761
8
300
1808
16
1810
1811
1813
1815
1815
1817
1820
1821
28
1821
1822
1823
1824
1833
1835
1836
1841
1848
1846
1848
1845
1824
1853
1855
1854
1857
1867
1872
1876
1906
1907
1910
14
20
24
1911
1913
1914
1917
1920
1919
1923
1924
1929
1934
1934
1940
1950
1960
1959
1968
1970
1977
1985
1988
1994
1994
1
1994
22
1997
45
2000
71
2006
100
000
15
273
2010
2012
2006
2012
1
2018
53
3
1
2018
2024
1917
128
500
1917
111
110
1917
2466
570
5
32
31
1988
2019
1970
1980
2000
2006
20
5
3
80
67
7
3
150
50
87
7
66
297
198
201
2020
127
586
94
028
33
557
32
14
86
118
5127
3155
958
276
9330
3
117
7
8
475
1
17
32
17
56
3
153
35626
15
3395
5610
5462
5286
4690
4461
4340
4117
2054
5073
30
50
15
6
40
614
16
7
21
1
2745
10
20
1000
1500
1500
24
26[...]<jupyter_text>\ Por último, la barra invertida. Ya la había mencionado, sirve para eliminar el significado especial, pero tiene otro uso.Así como quita significado a los caracteres especiales, le da significado especial a caracteres normales para formar conjuntos preestablecidos (conjuntos como los que se podrían formar con los corchetes: `[ ]`) * `\d` : Conjunto de dígitos (`[0-9]`)* `\s` : Conjunto de espacios en blanco (espacio, tabulador, entre otros)* `\w` : Conjunto de elementos de palabra (letras, números y guión bajo)* `\b` : Separador de palabras (no coincide con ningún caracter como tal)<jupyter_code># Palabras de 12 letras
expresion_12letras = re.compile(r"\b\w{12}\b")
busqueda = expresion_12letras.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>oficialmente
precolombina
Organización
considerados
decimocuarta
megadiversos
denominación
Constitución
correspondía
dependientes
constituiría
denominación
antecedieron
conformación
Constitución
Constitución
Constitución
generalizado
prevaleciera
Tenochtitlan
peninsulares
denominación
significaría
alternativos
conocimiento
recolectores
cultivadores
complementar
subsistencia
Construyeron
arqueológica
Aridoamérica
civilización
caracterizan
monumentales
arquitectura
construirlas
civilización
ceremoniales
construyeron
significaban
herramientas
Quetzalcóatl
relacionados
teotihuacana
comerciantes
agricultores
Quetzalcóatl
civilización
astronómicos
relacionadas
relacionaban
Quetzalcóatl
construyeron
astronómicas
relacionadas
relacionados
construyeron
arquitectura
calendáricos
observatorio
constelación
comerciantes
comerciantes
Xicocotitlan
funcionarios
conocimiento
civilización
prehispánica
subsistencia
topográficas
Tenochtitlán
conquistados
expediciones
Tenochtitlan
Tenochtitlan
aculturación[...]<jupyter_text>Los conjuntos se puden usar dentro de `[^ ]` para negarlos, pero muchas veces no hace falta ya que las letras mayúsculas (`\D, \S, \W`) ya significan lo opuesto de cada conjunto respectivamente.<jupyter_code># Palabras
expresion = re.compile(r"\b\S+\b")
busqueda = expresion.finditer(texto)

for resultado in busqueda:
  print(resultado.group(0))<jupyter_output>[1;30;43mSe truncaron las últimas líneas 5000 del resultado de transmisión.[0m
escritor
Carlos
Monsiváis
y
el
fotógrafo
Gabriel
Figueroa
Cabe
mencionar
al
director
español
nacionalizado
mexicano
Luis
Buñuel
y
sus
aportaciones
al
cine
surrealista
Un
Chien
Andalou
y
L'age
D'Or
ambas
coproducidas
con
Salvador
Dalí
y
que
realizó
en
Francia
posteriormente
en
México
realizó
Los
Olvidados
declarada
Memoria
del
Mundo
por
la
UNESCO
en
2003
que
le
valió
su
revalorización
en
el
Festival
de
Cannes
así
como
Subida
al
cielo
Nazarín
y
Simón
del
desierto
que
también
obtuvieron
reconocimiento
mundial
a
través
de
Cannes
En
España
realizaría
Viridiana
con
la
que
obtuvo
la
Palma
de
Oro
y
volvería
a
Francia
a
filmar
entre
otras
Le
charme
discret
de
la
burgeoisie
con
la
que
obtuvo
el
Óscar
a
mejor
película
extranjera
El
cine
mexicano
contemporáneo
incluye
figuras
notables
como
los
directores
Arturo
Ripstein
Felipe
Cazals
en
tanto
que
en
ámbito
internacional
destacan
Alejandro
González
Iñarritu
Guillermo
d[...]<jupyter_text>Grupos Para cerrar el tema, veremos los grupos, ya vimos como formarlos: con paréntesis `( )`. Pero cada paréntesis que se usa forma un grupo al cuál se le puede hacer referencia despúes.<jupyter_code># Se pueden usar los grupos dentro de la misma expresion
expresion = re.compile(r"\b(\w+)\b(.*?)\b\1\b")
busqueda = expresion.finditer(texto)

for resultado in busqueda:
  print(resultado.group(1),len(resultado.group(2)))<jupyter_output>1830 43
México 144
federal 74
tiene 217
de 124
el 43
México 335
en 56
el 50
en 114
el 128
y 35
en 204
la 100
la 242
de 106
la 189
y 48
por 80
en 191
es 122
12 50
término 809
como 37
que 206
de 77
de 12
como 593
gentilicio 314
de 11
del 39
de 52
es 59
del 584
vocablo 225
Clavijero 179
que 24
el 25
del 28
de 13
los 80
de 46
y 166
el 24
de 22
del 24
de 67
y 49
y 95
de 208
la 31
a 27
C 57
de 82
la 121
y 81
de 49
y 47
El 187
de 40
la 11
de 89
se 136
el 66
el 235
fue 55
el 133
Se 211
en 130
fueron 83
a 8
de 13
periodo 41
de 79
ciudades 143
y 38
se 150
y 54
en 53
la 101
y 47
de 104
la 53
obsidiana 7
y 101
de 74
y 52
la 15
algunos 113
de 19
obsidiana 7
y 101
de 144
Teotihuacán 68
la 72
en 44
de 103
piedra 232
con 30
fecha 17
la 63
los 43
los 18
que 154
el 46
dios 48
del 54
dios 44
del 23
la 32
ciudades 141
la 48
estaban 51
la 33
para 82
de 178
para 36
y 104
el 19
sur 18
y 64
ciudad 120
de 37
la 152
se 19
se 153
la 34
de 55
periodo 41
un 151
La 294
se 180
en 282
que 11
del 45
con 171
su 400
de [...]
{'fraction_non_alphanumeric': 0.06953544405461386, 'fraction_numerical': 0.08200532611911908, 'mean_word_length': 4.571832312764955, 'pattern_counts': {'":': 0, '<': 60, '<?xml version=': 0, '>': 62, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '18', 'dir': 'jupyter-structured-clean-dedup', 'id': '667040', 'license': 'MIT', 'n_tokens_mistral': 11062, 'n_tokens_neox': 9739, 'n_words': 3620, 'path': 'Materias/ProcesamientoLenguaje/Clases/S01_003_RE.ipynb', 'repo_name': 'jorgeo80/UP_MDC', 'size': '23657'}