Given both the word and the corresponding IPA equivalent, is there any stable algorithm for mapping the letter of each word to the IPA letter?

For example, given close-quote and IPA kloʊzkwoʊt -- I'd want to create a mapping along the lines of:

c -> k

l -> l

o -> oʊ

s -> z

e ->

q -> kw

uo -> oʊ

t -> t

e ->

I'm very much open to different representations of the mapping, but this is at least the gist of the question. Ad-hoc matching of vowels etc. haven't given me a lot of luck in the general case... Any tips for doing this, or pointers on how to do it?

  • 5
    There are some languages whose orthography makes this practical. English is not one of them. Just in your example above, there are some letters that you map to 0, the mapping of "uo" to /oʊ/ is poorly motivated, and the traditional analysis would map the discontinuous set "o..e" to /oʊ/. And "close" is an example, like "bow" and "lead" where you need to do syntactic analysis to determine what sounds to map the letters to.
    – Colin Fine
    Commented Oct 15, 2018 at 22:55
  • 1
    Why not a lot of rules like thrive→θraɪv?
    – user6726
    Commented Oct 16, 2018 at 1:01
  • 1
    @ColinFine I agree with your points, but they seem to stem from the perspective of "Can I map English orthography to an IPA representation?" whereas the question is "Given both the spelling and IPA rep. for a given word in English, does there exist an algorithm to map letters to IPA symbols?"
    – iacobo
    Commented Oct 16, 2018 at 9:08

4 Answers 4


Yes, there is an algorithm and even a readily available tool for this task. The tool is the Helsinki Finite State Transducer. I have seen an application of it to historical linguistics and determining proto-languages and sound changes from cognate lists (for uralic languages), but in principle it should also do alignment of spelling and IPA representation.

  • 1
    Thank you! This looks like a great starting point. If I may ask, after I have created a transducer for the <word>:<ipa> entries, what would be the tool to create the mapping/alignment for the two words? Looking at the tools in HFST, it's not completely obvious to me which one to use for the last part.
    – Andreas
    Commented Oct 16, 2018 at 19:36
  • How about words like yacht or are in British English? The word are has at least four pronunciations depending on whethe it's stressed and whether it is followed by a vowel. What's are we going t do with the ch in yacht? And how about the T in listen? Commented Oct 20, 2018 at 19:21
  • @Andreas: This work (Hannes Wettig, Suvi Hiltunen, Roman Yangarber, MDL-based Models for Alignment of Etymological Data) aclweb.org/anthology/R11-1016 may be of help. Unfortunately the paper does not name the tools. Commented Oct 24, 2018 at 13:29
  • @Andreas This link will also help you cs.helsinki.fi/group/langtech Commented Oct 24, 2018 at 13:35

You might get somewhere with some languages, but I doubt you'll have great success with this in English, for example.

One reason is that English has many words for which there is no single pronunciation, but a variety of different pronunciations depending on the enviroment of the word. So, for example, in British English, the word are could be any of these:

  • /ə/
  • /ər/
  • /ɑ:/
  • /ɑ:r/

Which one you get depends on whether the word is stressed or not, or stranded or not, plus whether it is followed by a vowel or not.

Secondly, there is the problem of silent letters. How could we meaningfully map the E at the end of are? How about CH in yacht or T in listen?

Another complication you have is discontinuous spelling rules. So, for example take the word:

  • tome /toʊm/ (American English)

Here you cannot really just map the O onto the /oʊ/. It is represented in the orthography by the O and the E occurring on either side of a consonant.

However, you might be able to get quite a long way. It also depends what exactly the mapping is for, and what you mean by mapping phonemes onto letters. For example suppose you have the noun minute, in what sense does the U map onto /ɪ/? (And again what are you doing with the E there?) In some sense maybe, but it's not clear - or maybe it's just not clear to me.

  • 2
    Thanks for the reply! I agree, everything we do will be very ad-hoc, as there's no way of in absolute manners link them one to one. I do not come from a linguistic background, which is why I'm looking at it through a very "best-effort" way of thinking. But to answer your question: given, minute - mɪnʌt. I would say it's not unreasonable to map the u to ʌ, and simply leave the suffix e mapping to nothing, while the rest map 1-to-1. yacht - jɑt. I guess we could roughly say ach would map to ɑ, but that's a bit of a stretch as well.
    – Andreas
    Commented Oct 22, 2018 at 19:24
  • 1
    @AndreasIt looks like an interesting challenge! Good luck (and perhaps come back and tell us what happened later? Even if that's in a few years time!) Commented Oct 22, 2018 at 19:25

Phonetisaurus can do that:


There is a strict 1-1 correspondence between the 2 rows:

c  l  o  s  e  <eps>  
K L OW1 Z _ <eps> 

q  u  o  t  e  <eps>  
K W OW1 T _ <eps> 

Python code:

import phonetisaurus
model = phonetisaurus.Phonetisaurus ("../../train/model.fst")

results = model.Phoneticize ("close",
    1, # n best
    500, # beam size
    10.0, # n best threshold
    False, # write_fsts
    False, # accumulate
    0.0 # target probability mass

for result in results :
    for ilab in result.ILabels:
        print (model.FindIsym(ilab), end="  ")

    for olab in result.OLabels:
        print (model.FindOsym(olab), end=" ")

but you need to follow the GitHub instructions to install Phonetisaurus, install Python bindings, and train the model.

In the end I don't find it very useful for my purpose, but others may :)


The Phonetisaurus aligned CMUdict can be obtained here to avoid complex build and compile steps on linux.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.