Question: I'm looking for a fully accurate statement of an algorithm to count syllables in words. What I'm finding when I research is inconsistent or what I know to generate incorrect results. Does anyone have any suggestions of how to accomplish this? Thanks.

The algorithm I'm using now:

1. Count the number of vowels in the word.
2. Do not count double-vowels ("rain" has 2 vowels but is only 1 syllable)
3. If last letter in word is vowel do not count ("side" is 1 syllable)

Are there any more rules I'm missing? I'm trying to determine in testing for my incorrect results if the algorithm I'm using is wrong or my implementation of it.

Answer: 
[Ambiguity](http://en.wikipedia.org/wiki/Ambiguity) is a huge issue in natural language processing, but some tasks can actually handle with the ambiguity with nice accuracy. It turns out syllabification is one of them, so don't listen to the other answers. :)

Syllabification
===============

Heuristic-based
---------------

You could come up with algorithms [achieving correct syllabification virtually throughout the English vocabulary](http://www.phon.ucl.ac.uk/home/wells/syllabif.htm), but it seems complicated to program correctly.

Corpus-based
------------

As always, when hand-made algorithms don't help too much, Natural Language Processing researchers use hand-tagged corpora containing the correct answers for given words. Learnings algorithms are then used and often provide great accuracy. You can use [LingPipe's syllabification (see "English syllabification")](http://alias-i.com/lingpipe/demos/tutorial/hyphenation/read-me.html) which follows this approach.

Exhaustive list
---------------

English only has so many words, which is how we came up with dictionaries. Such dictionaries often contain the correct syllabification. You could scrape reference.com. For example, the [undulate entry](http://dictionary.reference.com/browse/undulate) contains « un·du·late », which is enough to know there are three syllables.

Other such dictionaries include [Answers.com](http://www.answers.com/topic/undulate), [The Free Dictionary](http://www.thefreedictionary.com/undulate), [Merriam-Webster](http://www.merriam-webster.com/dictionary/undulate), and so on. Do read the Terms and Conditions, automated retrieval may not be allowed. And different dictionaries don't [always](http://www.merriam-webster.com/dictionary/obama) [agree](http://www.thefreedictionary.com/Barack+Obama) with each other.

It won't help with new words or proper nouns, but I'd say it's going to be the most accurate method.

About hyphenation
=================

Another related problem got a lot more exposure: hyphenation. But don't use that! It is used in typesetting programs [such as LaTeX](http://en.wikipedia.org/wiki/Hyphenation_algorithm#Hyphenation_in_TeX), but only aims to provide **some** of the correct hyphens, without ever providing an incorrect one (high precision, low recall). It's interesting to note that there only are 14 exceptions, eg. project which has a different hyphenation depending on the part-of-speech (verb or noun).

Hyphenation programs
--------------------

If you decide that it's enough for you needs, note that a [few implementations of the TeX hyphenation algorithm exist in other languages, such as Python, Perl or Ruby](http://en.wikipedia.org/wiki/Hyphenation_algorithm#References).
What you need is a dictionary to map regular spelling of English words to their [International Phonetic Alphabet](http://en.wikipedia.org/wiki/International_Phonetic_Alphabet) equivalents. This has more accurate representations of syllables in the words. From that, you can make a more accurate syllable count. But, that doesn't account for variations in pronunciations.