mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-21 02:39:31 -06:00
47 lines
1.3 KiB
Haskell
47 lines
1.3 KiB
Haskell
import SG
|
|
import PGF2
|
|
import Data.Char
|
|
import Data.List
|
|
|
|
main = do
|
|
db <- openSG "assets/semantics.db"
|
|
inTransaction db $ do
|
|
ls <- fmap lines $ readFile "../../../lib/src/translator/Dictionary.gf"
|
|
let glosses = [x | Just (fn,gloss) <- map gloss ls, x <- glossTriples fn gloss]
|
|
topics <- fmap (map toTriple . lines) $ readFile "topics.txt"
|
|
sequence_ [insertTriple db s p o | (s,p,o) <- glosses++topics]
|
|
closeSG db
|
|
|
|
toTriple l =
|
|
case readTriple l of
|
|
Just t -> t
|
|
Nothing -> error ("topics.txt: "++l)
|
|
|
|
gloss l =
|
|
case words l of
|
|
("fun":fn:_) -> case dropWhile (/='\t') l of
|
|
'\t':l -> Just (fn,l)
|
|
_ -> Nothing
|
|
_ -> Nothing
|
|
|
|
glossTriples fn s =
|
|
(if null gs then [] else [(fn_e,gloss,mkStr (merge gs))])++
|
|
(if null es then [] else [(fn_e,example,mkStr (merge (map (init . tail) es)))])
|
|
where
|
|
fn_e = mkApp fn []
|
|
gloss = mkApp "gloss" []
|
|
example = mkApp "example" []
|
|
(es,gs) = partition isExample (splitGloss s)
|
|
|
|
splitGloss s =
|
|
let (xs,s') = break (==';') s
|
|
in trim xs : case s' of
|
|
';':s -> splitGloss s
|
|
_ -> []
|
|
where
|
|
trim = reverse . dropWhile isSpace . reverse . dropWhile isSpace
|
|
|
|
merge = intercalate "; "
|
|
|
|
isExample s = not (null s) && head s == '"' && last s == '"'
|