diff options
| author | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:54:35 +0000 |
|---|---|---|
| committer | aarne <aarne@cs.chalmers.se> | 2008-06-25 16:54:35 +0000 |
| commit | e9e80fc389365e24d4300d7d5390c7d833a96c50 (patch) | |
| tree | f0b58473adaa670bd8fc52ada419d8cad470ee03 /src/PGF/Quiz.hs | |
| parent | b96b36f43de3e2f8b58d5f539daa6f6d47f25870 (diff) | |
changed names of resource-1.3; added a note on homepage on release
Diffstat (limited to 'src/PGF/Quiz.hs')
| -rw-r--r-- | src/PGF/Quiz.hs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/PGF/Quiz.hs b/src/PGF/Quiz.hs new file mode 100644 index 000000000..7f5bae201 --- /dev/null +++ b/src/PGF/Quiz.hs @@ -0,0 +1,67 @@ +---------------------------------------------------------------------- +-- | +-- Module : TeachYourself +-- Maintainer : AR +-- Stability : (stable) +-- Portability : (portable) +-- +-- > CVS $Date: 2005/04/21 16:46:13 $ +-- > CVS $Author: bringert $ +-- > CVS $Revision: 1.7 $ +-- +-- translation and morphology quiz. AR 10\/5\/2000 -- 12\/4\/2002 -- 14\/6\/2008 +-------------------------------------------------------------------------------- + +module PGF.Quiz ( + mkQuiz, + translationList, + morphologyList + ) where + +import PGF +import PGF.ShowLinearize + +import GF.Data.Operations +import GF.Infra.UseIO + +import System.Random + +import Data.List (nub) + +-- translation and morphology quiz. AR 10/5/2000 -- 12/4/2002 + +-- generic quiz function + +mkQuiz :: String -> [(String,[String])] -> IO () +mkQuiz msg tts = do + let qas = [ (q, mkAnswer as) | (q,as) <- tts] + teachDialogue qas msg + +translationList :: + PGF -> Language -> Language -> Category -> Int -> IO [(String,[String])] +translationList pgf ig og cat number = do + ts <- generateRandom pgf cat >>= return . take number + return $ map mkOne $ ts + where + mkOne t = (norml (linearize pgf ig t), map (norml . linearize pgf og) (homonyms t)) + homonyms = nub . parse pgf ig cat . linearize pgf ig + +morphologyList :: PGF -> Language -> Category -> Int -> IO [(String,[String])] +morphologyList pgf ig cat number = do + ts <- generateRandom pgf cat >>= return . take (max 1 number) + gen <- newStdGen + let ss = map (tabularLinearize pgf (mkCId ig)) ts + let size = length (head ss) + let forms = take number $ randomRs (0,size-1) gen + return [(head (snd (head pws)) +++ par, ws) | + (pws,i) <- zip ss forms, let (par,ws) = pws !! i] + +-- | compare answer to the list of right answers, increase score and give feedback +mkAnswer :: [String] -> String -> (Integer, String) +mkAnswer as s = if (elem (norml s) as) + then (1,"Yes.") + else (0,"No, not" +++ s ++ ", but" ++++ unlines as) + +norml :: String -> String +norml = unwords . words + |
