Example: Speak -> Spubeak, more info here
Don't give me a solution, but point me in the right direction or tell which which python library I could use? I am thinking of regex since I have to find a vowel, but then which method could I use to insert 'ub' in front of a vowel?
It is more complex then just a simple regex e.g.,
"Hi, how are you?" → "Hubi, hubow ubare yubou?"
Simple regex won't catch that e
is not pronounced in are
.
You need a library that provides a pronunciation dictionary such as 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
Example:
#!/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))
"Hi, how are you?" → "Hubay, hubaw ubar yubuw?"
Note: It is different from the first example: each word is replaced with its syllables.
You can use regular expressions for substitutions. See re.sub
.
Example:
>>> import re
>>> re.sub(r'(e)', r'ub\1', 'speak')
'spubeak'
You will need to read the documentation for regex groups and so on. You will also need to figure out how to match different vowels instead of just the one in the example.
For some great ideas (and code) for using regular expressions in Python for a pronunciation dictionary, take a look at this link, which is one of the design pages for the Cainteoir project: http://rhdunn.github.com/cainteoir/rules.html
Cainteoir's text-to-speech rule engine design (which is not fully implemented yet) uses regular expressions. See also Pronunciation Dictionaries and Regexes, another article by the Cainteoir author.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With