stemmer-0.2: NLP/Stemmer.hs
-- | Haskell bindings for the Snowball stemming library
-- A 'pure' stemming interface. Strings should use UTF-8 encoding.
module NLP.Stemmer (
-- * Stemming algorithms
Algorithm(..)
-- * Stemming functions
, stem
, stemWords
) where
import NLP.Stemmer.C (Algorithm)
import qualified NLP.Stemmer.C as C
import Foreign (unsafePerformIO)
-- | Stem a word
stem :: Algorithm -> String -> String
stem algorithm input = withStemmer algorithm (\stemmer -> C.stem stemmer input)
-- | Stem a list of words, more efficient than @map 'stem'@
stemWords :: Algorithm -> [String] -> [String]
stemWords algorithm input = withStemmer algorithm (\stemmer -> mapM (C.stem stemmer) input)
{-# NOINLINE withStemmer #-}
withStemmer :: Algorithm -> (C.Stemmer -> IO a) -> a
withStemmer algorithm action = unsafePerformIO $ C.withStemmer algorithm action