module NLP.Nerf.Dict
( extractPoliMorf
, extractPNEG
, extractNELexicon
, extractProlexbase
, extractIntTriggers
, extractExtTriggers
, module NLP.Nerf.Dict.Base
) where
import Control.Applicative ((<$>), (<*>))
import qualified Data.PoliMorf as Poli
import NLP.Nerf.Dict.Base
import NLP.Nerf.Dict.PNEG (readPNEG)
import NLP.Nerf.Dict.NELexicon (readNELexicon)
import NLP.Nerf.Dict.Prolexbase (readProlexbase)
import qualified NLP.Nerf.Dict.PNET as PNET
atomic :: Entry -> Bool
atomic = not . isMultiWord . neOrth
extractPNEG
:: FilePath
-> IO Dict
extractPNEG lmfPath =
fromEntries . filter atomic <$> readPNEG lmfPath
extractNELexicon
:: FilePath
-> IO Dict
extractNELexicon nePath =
fromEntries . filter atomic <$> readNELexicon nePath
extractPoliMorf
:: FilePath
-> IO Dict
extractPoliMorf poliPath
= fromPairs . filter (cond . snd)
. map ((,) <$> Poli.form <*> Poli.cat)
<$> Poli.readPoliMorf poliPath
where
cond x = x /= "pospolita" && x /= ""
extractProlexbase
:: FilePath
-> IO Dict
extractProlexbase proPath = do
fromEntries . filter atomic <$> readProlexbase proPath
extractIntTriggers
:: FilePath
-> IO Dict
extractIntTriggers pnetPath =
mkTriggers PNET.Internal <$> PNET.readPNET pnetPath
extractExtTriggers
:: FilePath
-> IO Dict
extractExtTriggers pnetPath =
mkTriggers PNET.External <$> PNET.readPNET pnetPath
mkTriggers :: PNET.Typ -> [PNET.Entry] -> Dict
mkTriggers typ
= fromPairs
. filter (not . isMultiWord . fst)
. map ((,) <$> PNET.orth <*> PNET.neTyp)
. filter (PNET.hasTyp typ)