cardel

Ejercicio

May 6th, 2024 (edited)
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.05 KB | None | 0 0
  1. import re
  2.  
  3. """
  4. Esta función recibe un archivo de texto y una expresión regular.
  5.  
  6.  
  7. Todas las frases del libro "War of the Worlds" que contienen la palabra war o la palabra worlds.
  8. Todas las frases de "Moby Dick" que contienen palabras que empiecen por whal.
  9. En ambos casos, será necesario que los patrones no tengan en cuenta mayúsculas y minúsculas. Por tanto, habrá que devolver las frases que contengan "worlds" y también las que contengan Worlds o wORLdS.
  10.    Como parte del ejercicio, deberá separarse el texto en frases. Éste es un tema que puede llegar a ser muy complejo y por tanto en este ejercicio trabajaremos con una simplificación. En concreto, consideraremos que las frases terminarán siempre con un punto "." o con un símbolo de interrogación "?". Adicionalmente, el texto ha sido simplificado para no contener algunos símbolos conflictivos como los puntos suspensivos. Nótese que muchas de las frases están repartidas en más de una línea de texto. Las frases que se devuelven deben incluir, en todo caso, el símbolo de final de frase (punto "." o "?").
  11.  
  12. """
  13. def process_book(input_file, regular_exp):
  14.   output = []
  15.   data = ""
  16.   with open(input_file, "r") as file:
  17.     data = file.read().rstrip()
  18.  
  19.   data = re.split(r'[.?]', data)
  20.   #data = list(map(lambda x: x.strip(), data))
  21.   data = list(map(lambda x: x[1:] if len(x) > 0 and x[0]=="\n" else x, data))
  22.  
  23.   for line in data:
  24.     #Aplicar patron
  25.     if re.search(regular_exp, line, re.IGNORECASE):
  26.       if line[-1] != '.' and line[-1] != '?':
  27.         line += "."      
  28.       output.append(line)
  29.  
  30.   return output
  31.  
  32. pattern = r'\b(?:war|worlds)\b'
  33. ret = process_book("warworlds.txt", pattern)
  34.  
  35. assert(len(ret) == 15), "Incorrect Number Of Sentences"
  36. assert(" I, THE EVE OF THE WAR." in ret), "Missing A sentence "
  37. assert("No one gave a thought to the older worlds of space as \
  38. sources\nof human danger, or thought of them only to dismiss \
  39. the idea of life\nupon them as impossible or improbable \
  40. ." in ret), "Missing A sentence "
  41.  
  42.  
  43. print("Code run without problems")
  44.  
Add Comment
Please, Sign In to add comment