Is there an algorithm for generating homophones?
Input "cypress", output = {cipress, cipres, cypres, sipress, sypress}
Soundex is the opposite: mapping homophones to the same value. If you indexed every word in the dictionary by its Soundex value, you can do a search to find all the homophones of that word.
There is (and I quote ..) Homophon ( stiffled higgle ) here: http://homophoner.yacomink.com/
It seems that YUI is being used
I made one. Source code here: https://github.com/evanshort73/homophone
Try in the browser http://evanshort.name/homophone/
Main idea: Download the CMU pronunciation pronunciation dictionary and create a file of allowed phoneme substitutions and their cost. Do your first depth search for every possible lookup, rollback when a partial result is not the beginning of any dictionary.
You might be better off downloading the list of homophones from the website. A quick Google search for the โhomophone listโ provides several interesting sites, including http://www.homophone.com .
The Gutenberg project has a Webster Unabridged Dictionary that you can download. You could use pronunciation in the dictionary as a key. However, just a dictionary analysis would be a project for yourself.