module NLP.WordNet.Util where
import NLP.WordNet.PrimTypes
import Prelude hiding (catch)
import Control.Exception
import Data.Char (toLower)
import Data.List (nub)
import Data.Maybe (fromMaybe)
import GHC.Handle
data IOModeEx = BinaryMode IOMode | AsciiMode IOMode deriving (Eq, Ord, Show, Read)
openFileEx fp (BinaryMode md) = openBinaryFile fp md
openFileEx fp (AsciiMode md) = openFile fp md
fst3 (a,_,_) = a
snd3 (_,b,_) = b
thr3 (_,_,c) = c
maybeRead :: (Read a, Monad m) => String -> m a
maybeRead s =
case readsPrec 0 s of
(a,_):_ -> return a
_ -> fail "error parsing string"
matchN :: Monad m => Int -> [a] -> m [a]
matchN n l | length l >= n = return l
| otherwise = fail "expecting more tokens"
lexId x n = (\ (_,i,_) -> i) $ (ssWords x !! n)
padTo n s = reverse $ take n $ (reverse s ++ repeat '0')
sensesOf :: Int -> SenseType -> [Int]
sensesOf n AllSenses = [1..n]
sensesOf n (SenseNumber i)
| i <= 0 = []
| i > n = []
| otherwise = [i]
charForPOS (Noun) = "n"
charForPOS (Verb) = "v"
charForPOS (Adj) = "a"
charForPOS (Adv) = "r"
tryMaybe :: IO a -> IO (Maybe a)
tryMaybe a = (a >>= return . Just) `catch` (const (return Nothing))
tryMaybeWarn :: (Exception -> IO ()) -> IO a -> IO (Maybe a)
tryMaybeWarn warn a = (a >>= return . Just) `catch` (\e -> warn e >> return Nothing)
partName :: POS -> String
partName = map toLower . show
cannonWNString :: String -> [String]
cannonWNString s'
| not ('_' `elem` s) &&
not ('-' `elem` s) &&
not ('.' `elem` s) = [s]
| otherwise =
nub [s,
replaceChar '_' '-' s,
replaceChar '-' '_' s,
filter (not . (`elem` "_-")) s,
filter (/='.') s
]
where s = map toLower s'
replaceChar from to [] = []
replaceChar from to (c:cs)
| c == from = to : replaceChar from to cs
| otherwise = c : replaceChar from to cs
getPointerType s = fromMaybe Unknown $ lookup s l
where
l =
[("!", Antonym),
("@", Hypernym),
("~", Hyponym),
("*", Entailment),
("&", Similar),
("#m", IsMember),
("#s", IsStuff),
("#p", IsPart),
("%m", HasMember),
("%s", HasStuff),
("%p", HasPart),
("%", Meronym),
("#", Holonym),
(">", CauseTo),
("<", PPL),
("^", SeeAlso),
("=", Attribute),
("$", VerbGroup),
("+", Nominalization),
(";", Classification),
("-", Class),
("+", Frames)]