Not a Ruby guy so no idea if its any good, but it is the implementation linked from here http://tartarus.org/~martin/PorterStemmer/