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 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.