Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: pran_krr en 11 Noviembre 2019, 10:38 am



Título: ¿Algoritmo para obtener todas las palabras de un fichero en python?
Publicado por: pran_krr en 11 Noviembre 2019, 10:38 am
Lo que intento es leer un fichero y hacer una lista con todas las palabras del fichero de la forma más eficiente posible y quería saber si existe algún tipo de algoritmo que lo realice de la forma más eficiente posible. He probado con .split() pero no valdría ya que el fichero contiene caracteres los cuales no reconocería (p.e "," "-" "(" ...). Se hacerlo con el método de ir reconociendo cada caracter y cuando el que reconozca no sea una letra unir todos los caracteres y formar palabra y seguir haciendo esto en todo el fichero pero no se si hay alguna otra forma de hacerlo.


Título: Re: ¿Algoritmo para obtener todas las palabras de un fichero en python?
Publicado por: engel lex en 11 Noviembre 2019, 14:33 pm
la forma mas facil que se me ocurre es con regex,

un ejemplo

Código
  1. import re
  2. text = "Lo que intento es leer un fichero y hacer una lista con todas las palabras del fichero de la forma más eficiente posible y quería saber si existe algún tipo de algoritmo que lo realice de la forma más eficiente posible. He probado con .split() pero no valdría ya que el fichero contiene caracteres los cuales no reconocería (p.e "," "-" "(" ...). Se hacerlo con el método de ir reconociendo cada caracter y cuando el que reconozca no sea una letra unir todos los caracteres y formar palabra y seguir haciendo esto en todo el fichero pero no se si hay alguna otra forma de hacerlo."
  3.  
  4. parts = re.findall(r"[a-záéíóúÁÉÍÓÚ]+",text,re.I)
  5.  
  6. # parts es un list que contiene lo siguiente
  7. # ['Lo', 'que', 'intento', 'es', 'leer', 'un', 'fichero', 'y', 'hacer', 'una', 'lista', 'con', 'todas', 'las',
  8. # 'palabras', 'del', 'fichero', 'de', 'la', 'forma', 'más', 'eficiente', 'posible', 'y', 'quería', 'saber',
  9. # 'si', 'existe', 'algún', 'tipo', 'de', 'algoritmo', 'que', 'lo', 'realice', 'de', 'la', 'forma', 'más',
  10. # 'eficiente', 'posible', 'He', 'probado', 'con', 'split', 'pero', 'no', 'valdría', 'ya', 'que', 'el',
  11. # 'fichero', 'contiene', 'caracteres', 'los', 'cuales', 'no', 'reconocería', 'p', 'e', 'Se', 'hacerlo',
  12. # 'con', 'el', 'método', 'de', 'ir', 'reconociendo', 'cada', 'caracter', 'y', 'cuando', 'el', 'que',
  13. # 'reconozca', 'no', 'sea', 'una', 'letra', 'unir', 'todos', 'los', 'caracteres', 'y', 'formar', 'palabra',
  14. # 'y', 'seguir', 'haciendo', 'esto', 'en', 'todo', 'el', 'fichero', 'pero', 'no', 'se', 'si', 'hay', 'alguna',
  15. # 'otra', 'forma', 'de', 'hacerlo']
  16.  

como regex nativamente no digiere las letras con acento las tuve que agregar (mayusculas y minusculas ya que no conoce ese concepto en esas letras), asi que cualquier otra (como ñ letras con dieresis, etc) deben ser agregadas a necesidad