Python: ¿Cómo anteponer la cadena ‘ub’ a cada vocal pronunciada en una cadena?

Ejemplo : Hablar -> Spubeak, más información aquí

No me dé una solución, pero apúnteme en la dirección correcta o diga qué biblioteca de python podría usar. Estoy pensando en expresiones regulares porque tengo que encontrar una vocal, pero entonces, ¿qué método puedo usar para insertar ‘ub’ delante de una vocal?

Es más complejo que una simple expresión regular , por ejemplo,

"Hi, how are you?" → "Hubi, hubow ubare yubou?" 

La expresión regular simple no detecta que e no se pronuncia en.

Necesita una biblioteca que proporcione un diccionario de pronunciación como nltk.corpus.cmudict :

 from nltk.corpus import cmudict # $ pip install nltk # $ python -c "import nltk; nltk.download('cmudict')" def spubeak(word, pronunciations=cmudict.dict()): istitle = word.istitle() # remember, to preserve titlecase w = word.lower() #note: ignore Unicode case-folding for syllables in pronunciations.get(w, []): parts = [] for syl in syllables: if syl[:1] == syl[1:2]: syl = syl[1:] # remove duplicate isvowel = syl[-1].isdigit() # pronounce the word parts.append('ub'+syl[:-1] if isvowel else syl) result = ''.join(map(str.lower, parts)) return result.title() if istitle else result return word # word not found in the dictionary 

Ejemplo:

 #!/usr/bin/env python # -*- coding: utf-8 -*- import re sent = "Hi, how are you?" subent = " ".join(["".join(map(spubeak, re.split("(\W+)", nonblank))) for nonblank in sent.split()]) print('"{}" → "{}"'.format(sent, subent)) 

Salida

  "¿Hola! Cómo estás?"  → "Hubay, hubaw ubar yubuw?" 

Nota: Es diferente del primer ejemplo: cada palabra se reemplaza con sus sílabas.

Puedes usar expresiones regulares para las sustituciones. Ver re.sub .

Ejemplo:

 >>> import re >>> re.sub(r'(e)', r'ub\1', 'speak') 'spubeak' 

Tendrá que leer la documentación de los grupos de expresiones regulares y así sucesivamente. También deberá averiguar cómo emparejar las diferentes vocales en lugar de solo la del ejemplo.

Para obtener algunas grandes ideas (y código) para usar expresiones regulares en Python para un diccionario de pronunciación, eche un vistazo a este enlace, que es una de las páginas de diseño para el proyecto Cainteoir : http://rhdunn.github.com/cainteoir/ rules.html

El diseño del motor de reglas de texto a voz de Cainteoir (que aún no está completamente implementado) utiliza expresiones regulares. Ver también Diccionarios de pronunciación y expresiones regulares , otro artículo del autor de Cainteoir.

Las expresiones regulares son realmente la mejor ruta. Si no está seguro de cómo proceder, verifique cómo funcionan los grupos de captura y cómo puede incluirlos en sus sustituciones.