Texto
Considere el siguiente texto sacado de una buena serie de televisión:
texto = '"Por qué será que en cuanto un hombre construye un muro, su
vecino inmediatamente quiere saber qué hay del otro lado" (Tyrion
Lannister). "Quien hace una pregunta debe ser capaz de soportar la
respuesta" (Yoren)'
Ejercicios
a. Cree la función texto_a_lista(texto)
que reciba la variable texto y retorne una lista con las palabras que componen ese texto. Note que las letras en el resultado van en minúscula y no debe considerar los símbolos coma, punto, paréntesis y doble comillas.
>>> palabras = texto_a_lista_a(texto)
>>> print( palabras )
['por', 'qué', 'será', 'que', 'en', 'cuanto', 'un', 'hombre',
'construye', 'un', 'muro', 'su', 'vecino', 'inmediatamente', 'quiere',
'saber', 'qué', 'hay', 'del', 'otro', 'lado', 'tyrion', 'lannister',
'quien', 'hace', 'una', 'pregunta', 'debe', 'ser', 'capaz', 'de',
'soportar', 'la', 'respuesta', 'yoren']
b. Modifique la función texto_a_lista(texto)
para que ahora retorne la lista de palabras ordenadas de acuerdo a largo (de mayor a menor).
>>> palabras = texto_a_lista_b(texto)
>>> print( palabras )
['inmediatamente', 'respuesta', 'lannister', 'construye', 'soportar',
'pregunta', 'vecino', 'tyrion', 'quiere', 'hombre', 'cuanto', 'yoren', 'saber', 'quien', 'capaz', 'será', 'otro', 'muro', 'lado', 'hace', 'debe', 'una', 'ser', 'qué', 'qué', 'que', 'por', 'hay', 'del', 'un', 'un', 'su', 'la', 'en', 'de']
c. Modifique la función texto_a_lista(texto)
para que retorne la lista de palabras ordenadas según el número de veces que aparecen (de mayor a menor). Considere el siguiente ejemplo de ejecución del programa. Note que el resultado consta de la lista de palabras no repetidas que aparecen en el texto, indicando el número de veces que éstas aparecen.
>> palabras = texto_a_lista_c(texto)
>> print( palabras )
[[2, 'un'], [2, 'qué'], [1, 'yoren'], [1, 'vecino'], [1, 'una'], [1, 'tyrion'], [1,'su'], [1, 'soportar'], [1, 'será'], [1, 'ser'], [1,'saber'], [1, 'respuesta'], [1, 'quiere'], [1, 'quien'], [1, 'que'], [1, 'pregunta'], [1, 'por'], [1, 'otro'], [1, 'muro'], [1, 'lannister'], [1, 'lado'], [1, 'la'], [1, 'inmediatamente'], [1, 'hombre'], [1, 'hay'], [1, 'hace'], [1, 'en'], [1, 'del'], [1, 'debe'], [1, 'de'], [1, 'cuanto'], [1, 'construye'], [1, 'capaz']]
Solución
def texto_a_lista(texto):
# Agregar un espacio al final del texto
texto += ' '
lista = []
palabra = ''
# Recorrer el texto
for letra in texto:
if letra == ' ': # Si la letra es un espacio
lista.append(palabra.lower())
palabra = '' # Limpiar la palabra
else: # Si la letra no es un espacio
if letra not in ',."()': # Evitar caracteres especiales
palabra += letra
return lista
def texto_a_lista_b(texto):
palabras = texto_a_lista(texto)
lista = [] # Lista para agregar los largos de las palabras
for palabra in palabras:
tmp = [len(palabra), palabra]
lista.append(tmp)
lista.sort()
lista.reverse()
salida = []
for palabra in lista:
salida.append(palabra[1])
return salida
def texto_a_lista_c(texto):
palabras = texto_a_lista(texto)
sin_repetir = []
for palabra in palabras:
if palabra not in sin_repetir:
sin_repetir.append(palabra)
contador = []
for palabra in sin_repetir:
contador.append([palabras.count(palabra), palabra])
contador.sort()
contador.reverse()
return contador
texto = '"Por qué será que en cuanto un hombre construye un muro, su vecino inmediatamente quiere saber qué hay del otro lado" (Tyrion Lannister). "Quien hace una pregunta debe ser capaz de soportar la respuesta" (Yoren)'
print(texto_a_lista(texto))
print(texto_a_lista_b(texto))
print(texto_a_lista_c(texto))