Here's a thought. Use a thesaurus. You don't just want to fuzzy match strings, you want to match *similar* words. Oracle's "Oracle Text" does this sort of thing, even comes with a built-in thesaurus (matches wider terms to narrower terms, so, e.g. "Perl" could come up on a search on "Programming language").
That should give you a start on ideas. I'm not aware of any open source alternatives, but some search engines do similar sorts of things.
Hope that helps.
perl -e 'print "How sweet does a rose smell? "; chomp ($n = <STDIN>);
+$rose = "smells sweet to degree $n"; *other_name = *rose; print "$oth
+er_name\n"'