frequency.hs 935 Bytes
import Control.Monad
import Text.Regex
import Text.XML.Light

concatWith :: String -> [String] -> String
concatWith _ [] = []
concatWith d (h:t) = foldl fun h t where
  fun s0 s1 = s0 ++ d ++ s1

getChild :: [Int] -> Element -> Element
getChild [] e = e
getChild (h:t) e = foldl fun e (h:t) where
  fun e n = (elChildren e) !! n

getF :: String -> Element -> Element
getF s e = (filterChildren (\x -> findAttr (unqual "name") x == Just s) e)!!0

printFs :: Element -> String
printFs fs = error ++ form ++ "\t" ++ lemma ++ "\t" ++ (concatWith ":" interp) where
  form = strContent $ getChild [0] $ getF "orth" fs
  (lemma:interp) = splitRegex (mkRegex ":") (strContent $ getChild [0, 1, 0] $ getF "disamb" fs)
  error = if (length $ filter (== ':') $ form) /= 0 then "ERROR " else ""

main = do
  s <- getContents
  let segs = filterElementsName (\e -> (qName e) == "fs") $ (onlyElems $ parseXML s)!!1
  mapM_ (putStrLn . printFs) segs