1. Create a check list for Swe do bnc <- readFile "bnc-to-check.txt" >>= return . words -- list of BNC funs dict <- readFile "DictionarySwe.gf" >>= return . map words . lines -- current Swe lexicon let dictmap = Data.Map.fromList [(f,unwords ws) | "lin":f:"=":ws <- dict] let bncdict = [(f,maybe "variants{} ;" id $ Data.Map.lookup f dictmap) | f <- bnc] -- current Swe for BNC writeFile "bncswe.txt" $ unlines [unwords ("lin":f:"=":[ws]) | (f,ws) <- bncdict] -- print inspectable file 2. Inspect the check list went through one thousand - corrected everything - removed trailing comments from corrected entries - split senses - added a -- | comment for disambiguating new senses move the checked words to correctswe.txt 3. Apply split senses grep "\-\- |" correctswe.txt | sort Copy split senses to bnc-to-check.txt - *but don't remove the unsplit senses* because they are needed to find words from other languages Copy split senses to Dictionary.gf, together with the -- | comments Make copies for split senses in DictionaryEng.gf Verify the result by compiling DictionaryEng.gf 4. Extend the Swe lexicon do old <- readFile "DictionarySwe.gf" >>= return . map words . lines -- read old lexicon new <- readFile "correctswe.txt" >>= return . map words . lines -- read corrected and new words let oldmap = Data.Map.fromList [(f,unwords ws) | "lin":f:"=":ws <- old] let newlist = [(f,unwords (takeWhile (/= "--") ws)) | "lin":f:"=":ws <- new] -- drop comments from corrected words let newmap = foldr (uncurry Data.Map.insert) oldmap newlist -- insert corrected words writeFile "newswe.txt" $ unlines [unwords ("lin":f:"=":[ws]) | (f,ws) <- Data.Map.assocs newmap] -- print lin rules Replace the body of DictionarySwe.gf by newswe.txt Compile DictionarySwe.gf 5. Spare the rest to do Remove the corrected words from bncswe.txt. Or take note of the last word that was checked already. 6. Generate a spreadsheet view Here for Swe and Bul: do bnc <- readFile "bnc-to-check.txt" >>= return . words swe <- readFile "DictionarySwe.gf" >>= return . map words . lines let swemap = Data.Map.fromList [(f,unwords ws) | "lin":f:"=":ws <- swe] bul <- readFile "DictionaryBul.gf" >>= return . map words . lines let bulmap = Data.Map.fromList [(f,unwords ws) | "lin":f:"=":ws <- bul] let look f m = maybe "-" id $ Data.Map.lookup f m let line f = f ++ "\t" ++ look f swemap ++ "\t" ++ look f bulmap writeFile "bnc-swe-bul.tsv" $ unlines $ map line bnc