A twitter friend (@communicating) tipped me off to the UEA-Lite Stemmer by Marie-Claire Jenkins and Dan J. Smith. Stemmers are NLP tools that get rid of inflectional and derivational affixes from words. In English, that usually means getting rid of the plural -s, progressive -ing, and preterite -ed. Depending on the type of stemmer, that might also mean getting rid of derivational suffixes like -ful and -ness. Sometimes it’s useful to be able to reduce words like consolation and console to the same root form: consol. But sometimes that doesn’t make sense. If you’re searching for video game consoles, you don’t want to find documents about consolation. In this case, you need a conservative stemmer.
The UEA-Lite Stemmer is a rule-based, conservative stemmer that handles regular words, proper nouns and acronyms. It was originally written in Perl, but had been ported to Java. Since I usually code in Ruby these days, I thought it’d be nice to make it available to the Ruby community, so I ported it over last night.
The code is open source under the Apache 2 License and hosted on github. So please check out the code and let me know what you think. Heck, you can even fork the project and make some improvements yourself if you want.
One direction I’d like to be able to go is to turn all of the rules into finite state transducers, which can be composed into a single large deterministic finite state transducer. That would be a lot more efficient (and even fun!), but Ruby lacks a decent FST implementation.