Rhyming Dictionary

If you have trouble compiling or using the rhyming dictionary on your system, please email me with the problem and a little bit about your system so I can help you fix it. I want this thing to be as bug-free as possible and I'll need your help. Thanks!

My email address has changed as of July 1, 2002. If you've sent any mail to my old address, it'll probably bounce so be sure to use the new one. Now that I have sourceforge forwarding it, there should be no more changes to the address.

What is this thing?

Why it's a rhyming dictionary, of course! But more specifically, it's a command-line program that takes a word and returns to you a formatted list of all words that rhyme with it. The default response is a perfect rhyme (which is probably what you want). Or you can get a syllable count of a certain word ("whitening" has 2-3 syllables, etc.). Previous versions included homophone and consonant match options but are no longer available in 0.3. If there is enough demand, I will re-add them.

However, if you don't want to deal with the command-line, you can also use my existing code as part of a CGI or GUI-based program with a minimal of effort. I plan to import Perl and PHP code at some point, but not right away. I'd rather not deal with Perl if I can avoid it.

If you want more fancy info, you can visit the project page and see what horrors I've caused over there.

What's new with it?

WinXP problems
I've been getting reports of people having problems running win32 Rhyme under Windows XP. Chances are, the version of Cygwin I was using is out-of-date and I'll need to recompile with a new version - once I track down a Windows machine to accomplish this with. Hopefully there will be a freshly compiled (and working) version up before November 5th, 2002, if all goes well.

Win32 Frontend for 0.9
Mr. Michael Andrews has gratiously contributed a frontend to the (admittedly) spartan command-line win32 version. I've tried it myself and can attest to its excellence. Thus, I've taken the liberty of giving it a 0.1 version number and have hosted it on sourceforge so all Windows users can download it. If you've grown tired of using the MS-DOS command prompt, I highly recommend giving this application a try.

Whither 0.10?
I have actually been working on a version 0.10. However, the main improvements so far have been the elimination of a few near-trivial memory leaks and bad reads (thanks to Valgrind). Adding more words to the dictionary is on my "to do" list. But since I have to do them by hand, the going depends largely on my availabilty of free time. If you would like to add words to the existing database, I've provided a guide that explains the entire process. Feel free to email me any new words you'd like added!

Win32 Port of 0.9
After a fair bit of effort, I've finally achieved success porting the existing dictionary code to win32 with the help of Cygwin. No code modifications were necessary, and the result is a text-based application that runs in an MS-DOS window. This version can be downloaded below. I will endeavor to keep this port in sync with the primary source, but my access to an MS-Windows box is limited and so I cannot guarantee this will always be the case.

Version 0.9
After taking another break from pronunciation-building, I've eliminated the Python scripts (except for the test script, which I may keep) entirely. The reason for the scripts was to pre-parse the full dictionary into easily-digestible text files. That way, I could use Python for that ugly (and slow) grunt work without having to require the user to have Python installed - since the pre-parsed text would be included along with the dictionary.

But that wastes a lot of space and is rather painful to download over a 56k connection. So, I could either require everyone to have Python installed in order to save some space, or re-implement the GDBM-maker in C. The result is that the new GDBM-maker is a lot faster than the old one and is slightly smarter about handling multiple pronunciations.

At any rate, expect the next version to come in a much smaller tarball than before.

Update:
I've also stumbled upon a stupid bug in the merging routine that prints the words out of order. So, I'm going to release version 0.9 with that bug fixed and wait until version .10 to add a lot more words.

Version 0.8
I've taken a small break from pronunciation-building in order to clean up the C codebase. Actually, "clean up" is a bit of an understatement. In order to eliminate the hard-coded word/syllable limits and improve maintainability, I've re-written about 75% of the entire program. Given how small the actual program is, it only took a couple of days to accomplish. I doubt I'll add a lot more features, but those hard-coded limits really annoyed me. If I've done my job right, the interface should be identical to the old one.

Oh, and I've cobbled together a man page too. It just didn't feel like a genuine Unix program without one. Now that I've added over 500 new six letter words to the dictionary, it seemed as good a time as any to make a release. Next I'll begin work on the large amount of seven letter words still missing. The missing words follow a nice bell curve, reaching the maximum around 10 or 11 letters, and so I have a very long way to go before I can call it 1.0.

What's old with it?

All the information on the older versions has been transferred to a new page to save some space.

Where can I get the source?

Where can I get RPMs?

Where can I get the Win32 port?

Where can I get the scripts?

The application code is distributed under the GPL. The dictionary data is distributed without restrictions of any kind.

I'm planning to clean up this site layout a bit, also. Expect the old releases to wind up on an "archive" page before too long. I doubt a lot of people will be interested in the 0.1 version of this thing, really.

How does it work?

My work is based wholly on the work of the Carnegie Mellon University Pronouncing Dictionary. A slightly debugged version of that dictionary is included as pre-parsed gdbm files that any gdbm-aware language can search with a minimal of effort.

I've also made a technical explanation of how this all works.

Why did you write this?

Because all the other rhyming dictionaries I've seen were either in dead tree format (which takes awhile to flip through), or were web-only (which would force me to be online constantly to use them) and I didn't like either approach. So I wrote one I could use on my machine for when it wasn't on the network that didn't take up a lot of resources and worked very fast. I believe I have succeeded.

As for why I needed a rhyming dictionary in the first place . . . you don't really need to know that :)

Who are you?

Brian "tuffy" Langenberger

If my Rhyming Dictionary is cool, tell your friends. If it sucks, tell me :)

What are your future plans?

With the elimination of the MySQL dependancy, all that's left is cleanup and bug-fixes. Python, Perl and PHP implementations should keep me busy for a little while longer, however. Not that I mind.