mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-06 09:42:50 -06:00
A Russian dictionary
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.
This commit is contained in:
63
contrib/eaglesconv/EaglesMatcher.hs
Normal file
63
contrib/eaglesconv/EaglesMatcher.hs
Normal file
@@ -0,0 +1,63 @@
|
||||
-- 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
|
||||
Reference in New Issue
Block a user