mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-13 23:09:31 -06:00
A Russian dictionary generated from a wordlist created by the FreeLing project. The accompanying converter can be used to convert other wordlists in EAGLES format to GF grammars.
64 lines
2.1 KiB
Haskell
64 lines
2.1 KiB
Haskell
-- Copyright (C) 2011 Nikita Frolov
|
|
|
|
-- The format specification can be found at
|
|
-- http://devel.cpl.upc.edu/freeling/svn/trunk/doc/tagsets/tagset-ru.html
|
|
|
|
-- Bugs in the specification:
|
|
-- Participle, 2nd field: case, not mood
|
|
-- Participle, 6th field: field, not person
|
|
-- Verb, persons can be denoted both with 'Pnumber' or just 'number'
|
|
-- Noun, 10th field can be absent
|
|
|
|
-- No, it wouldn't be simpler to implement this grammar with Parsec or another
|
|
-- parser combinator library.
|
|
|
|
|
|
module EaglesMatcher where
|
|
|
|
import qualified Data.Text as T
|
|
import Data.List
|
|
import qualified Data.Map as M
|
|
|
|
type Forms = M.Map T.Text T.Text
|
|
|
|
isOpenCat ('A':_) = True
|
|
isOpenCat ('N':_) = True
|
|
isOpenCat ('V':_) = True
|
|
isOpenCat ('D':_) = True
|
|
isOpenCat _ = False
|
|
|
|
noun forms (c, n) = findForm (matchNoun . T.unpack) forms
|
|
where matchNoun ('N':_:c':n':_) = c == c' && n == n'
|
|
matchNoun _ = False
|
|
|
|
adj forms d = findForm (matchAdj . T.unpack) forms
|
|
where matchAdj ('A':'N':'S':'M':_:'F':d':_) = d == d
|
|
matchAdj _ = False
|
|
|
|
verbPres forms (n, p) = findForm (matchPres . T.unpack) forms
|
|
where matchPres ('V':'D':n':_:'P':'P':p':_:'A':_) = n == n' && p == p'
|
|
matchPres ('V':'D':n':_:'F':'P':p':_:'A':_) = n == n' && p == p'
|
|
matchPres ('V':'D':n':_:'P':'P':p':_) = n == n' && p == p'
|
|
matchPres ('V':'D':n':_:'F':'P':p':_) = n == n' && p == p'
|
|
matchPres _ = False
|
|
|
|
verbPast forms (n, g) = findForm (matchPast . T.unpack) forms
|
|
where matchPast ('V':'D':n':g':'S':_:_:'A':_) = n == n' && g == g'
|
|
matchPast _ = False
|
|
|
|
verbImp forms = findForm (matchImp . T.unpack) forms
|
|
where matchImp ('V':'M':_) = True
|
|
matchImp _ = False
|
|
|
|
verbInf forms = findForm (matchInf . T.unpack) forms
|
|
where matchInf ('V':'I':_) = True
|
|
matchInf _ = False
|
|
|
|
adv forms = findForm (matchAdv . T.unpack) forms
|
|
where matchAdv ('D':d:_) = d == 'P'
|
|
matchAdv _ = False
|
|
|
|
findForm match forms = case find match (M.keys forms) of
|
|
Just tag -> forms M.! tag
|
|
Nothing -> findForm (\ _ -> True) forms
|