[Python] - Script devuelva un cadena en forma de 'sms'

Iniciado por Pryato, 27 Octubre 2013, 02:58 AM

0 Miembros y 1 Visitante están viendo este tema.

Pryato

Buenas, tengo que hacer el siguiente script,:
Se pide que diseñe un programa que lea un texto (sin acentos ni otros caracter caracteres que no sean letras) y lo vuelva a escribir en formato SMS. Por ejemplo, si el usuario del programa escribe:
Hola que tal por donde estas
Debería escribir:
ola que tl x donde estas
A tal efecto, considera los siguientes cambios a hacer sobre la cadena (en el orden indicado):

• En las palabras que empiezan por H, suprimir la h

• Las silabas "que" o "qui" cambiarlas por "que" o "ki".

• Las silabas "por" cambiarlas por "x".

• En los monosilabos de una sola vocal y como minimo 2 letras, suprimir la vocal. Considere que un
monosilabo es un término que solo tiene una vocal. Naturalmente las vocales de "que" o "ki" no se han de sustituir.

Hasta el momento lo he hecho todo, pero la ultima parte de suprimir la vocal en los monosilabos, no se como hacerlo. Tengo esto de momento:
Código (python) [Seleccionar]
import string

def sin_h(s):
    if s[0] in 'Hh':
        s1= s[1:]
    else:
        s1=''
    s1=s1.replace(' H'," ")
    s1=s1.replace(' h',' ')
    rep_q(s1)

def rep_q(s):
    s=s.replace('Que','que')
    s=s.replace('que','que')
    s=s.replace('Qui','ki')
    s=s.replace('qui','ki')
    rep_x(s)

def rep_x(t):
    t=t.replace('Per','x')
    t=t.replace('per','x')
    sin_voc(t)

def sin_voc(s):
    ...
    ...


txt=raw_input('Escribe un texto: ')

sin_h(txt)


Como veis, me falta la ultima funcion de sin vocales, donde solo hay q eliminar la vocal de los monosilabos, no de todas las palabras... No se como hacerlo..

Si alguien me puede ayudar...

Gracias :)

tincopasan

hola:
lo más simple que se me ocurre es
1) pues básicamente deberías verificar el largo de cada palabra que forme el texto
2) si tiene dos carácteres buscar la posición de la vocal (0-1) y escribir la palabra con el otro carácter.ej: de e=1 print palabra[0] (por regla general la mayoria de las palabras a abreviar es la segunda letra.

3) si es de tres lo mismo o mejor aún sólo escribir el primer y último carácter.
ej: tal = print (palabra[0]+palabra[2] = tl
es obvio que la mayoría de los monosílabos la vocal es la intermedia.

espero que te oriente.

Pryato


Danyfirex

Se me ocurrió algo masomenos así:


Código (python) [Seleccionar]
import re
cadena="hola que tal soy del norte"

for palabra in cadena.split(" "):
if len(palabra)==3:
  l1=re.match("[^aeiou]", palabra[-1])
  l2=re.match("[^aeiou]", palabra[0])
  l3=re.match("[aeiou]", palabra[1])
  if l1 and l2 and l3:
     print (palabra)
     print palabra[0]+palabra[-1]


Espero te sirva de ayuda. aunque no sea la forma mas eficiente. funciona para monosílabas de largo 3.

saludos

tincopasan

usé una creación de lista con la división de la cadena por el delimitador espacio
lista=mensaje.split(" ")
después trabajas como con cualquier lista.

0x5d

Yo haría lo siguiente y por favor corregir si estoy hablando algo nada que ver...


Teóricamente sería:
Código (python) [Seleccionar]

palabras = ["que", "hola", "saludos"]
replaces = ["k", "ola", "salu2"]
frase = "Hola que tal, dale saludos a tu familia!"
for i, j in zip(palabras, replaces):
    frase = frase.replace(i, j)

Y haría los reemplazos pertinentes en pocas líneas, "que" -> k ; hola -> ola ; saludos -> salu2

Saludos Pythoneros ! :D
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

tincopasan

0x5d: no está mal en ese ejemplo pero... si la frase es otra?
solo reemplazarías esas tres palabras y el objetivo es cualquier palabra que cumpla esas determinadas condiciones! no reemplazas palabras que empiecen por h! solo hola, hablar u hoy quedan fuera en tu ejemplo. Rescato que si habría que reemplazar "dos" x 2 ejemplo: dormidos= dormi2

0x5d

Ah pues no había entendido esa parte tuya ... Yo creo que nada más te queda usar "import re" y mediante las regex ir verificando e ir reemplazando según el caso...


Saludos!
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !