From e7452a19b4ee10ef825939c12ef7e22e603b77db Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 10 Apr 2014 17:11:50 +0000 Subject: [PATCH] more words checked in DictionaryFre --- lib/src/french/ParadigmsFre.gf | 12 +- lib/src/translator/CheckDict.hs | 7 +- lib/src/translator/todo/TopDictionaryFre.gf | 220 ++++++++++--------- lib/src/translator/todo/check-dictionary.t2t | 17 +- 4 files changed, 132 insertions(+), 124 deletions(-) diff --git a/lib/src/french/ParadigmsFre.gf b/lib/src/french/ParadigmsFre.gf index 52a86d507..388841557 100644 --- a/lib/src/french/ParadigmsFre.gf +++ b/lib/src/french/ParadigmsFre.gf @@ -61,7 +61,10 @@ oper genitive : Prep ; -- genitive, constructed with "de" dative : Prep ; -- dative, usually constructed with "à" - mkPrep : Str -> Prep ; -- preposition (other than "de" and "à") + mkPrep : overload { + mkPrep : Str -> Prep ; -- simple preposition (other than "de" and "à") + mkPrep : Str -> Prep -> Prep ; -- complex preposition e.g. "à côté de" + } ; --2 Nouns @@ -333,12 +336,15 @@ oper accusative = complAcc ** {lock_Prep = <>} ; genitive = complGen ** {lock_Prep = <>} ; dative = complDat ** {lock_Prep = <>} ; - mkPrep p = {s = p ; c = CPrep PNul ; isDir = False ; lock_Prep = <>} ; + mkPrep = overload { + mkPrep : Str -> Prep = \p -> {s = p ; c = CPrep PNul ; isDir = False ; lock_Prep = <>} ; + mkPrep : Str -> Prep -> Prep = \s,c-> {s = s ; c = c.c ; isDir = False ; lock_Prep = <>} + } ; --- obsolete Preposition : Type ; mkPreposition : Str -> Preposition ; - mkPreposition = mkPrep ; + mkPreposition s = mkPrep s ; regGenN : Str -> Gender -> N ; regN : Str -> N ; diff --git a/lib/src/translator/CheckDict.hs b/lib/src/translator/CheckDict.hs index 35f28331b..586289ebf 100644 --- a/lib/src/translator/CheckDict.hs +++ b/lib/src/translator/CheckDict.hs @@ -29,7 +29,7 @@ mergeDict lang = do new <- readFile (gfFile "todo/TopDictionary" lang) >>= return . lines -- read corrected and new words let header = getHeader new let oldmap = Data.Map.fromList [(f,unwords ws) | "lin":f:"=":ws <- map words old] - let newlist = [(f,unwords (takeWhile (/= "--") ws)) | "lin":f:"=":ws <- map words new] -- drop comments from corrected words + let newlist = [(f,unwords ws) | "lin":f:"=":ws <- map words new] let newmap = foldr (uncurry Data.Map.insert) oldmap newlist -- insert corrected words writeFile (gfFile "tmp/Dictionary" lang) $ unlines $ fromTop header ++ [unwords ("lin":f:"=":[ws]) | (f,ws) <- Data.Map.assocs newmap] ++ ["}"] -- print revised file to tmp/ @@ -52,12 +52,13 @@ fromTop = map tt where -- try to find lin rules by searching first literally, then subcategories in priority order lookupFun f dictmap = case look f of - Just rule -> rule - _ -> case [r | Just r <- map look (subCats f), head (words r) `notElem` ["variants","variants{}"]] of + Just rule | notEmpty rule -> rule + _ -> case [r | Just r <- map look (subCats f), notEmpty r] of rule:_ -> "variants{}; -- " ++ rule -- cannot return it as such, as probably type incorrect _ -> "variants{} ; -- " where look = flip Data.Map.lookup dictmap + notEmpty r = head (words r) `notElem` ["variants","variants{}"] subCats f = case splitFun f of (fun,cat) -> case cat of diff --git a/lib/src/translator/todo/TopDictionaryFre.gf b/lib/src/translator/todo/TopDictionaryFre.gf index 475e19511..6a898a169 100644 --- a/lib/src/translator/todo/TopDictionaryFre.gf +++ b/lib/src/translator/todo/TopDictionaryFre.gf @@ -1,3 +1,5 @@ +---- checked by AR till once_Adv in the BNC order + concrete TopDictionaryFre of TopDictionary = CatFre ** open ParadigmsFre, (P = ParadigmsFre), @@ -616,130 +618,130 @@ lin late_A = mkA "tardif" ; ---- not A in Fre lin voice_N = mkN "voix" feminine ; lin both_Adv = mkAdv "tous les deux" ; --- why Adv lin once_Adv = mkAdv "une fois" ; ---- up to this checked by AR -lin police_N = mkN "policier" masculine | mkN "police" feminine ; -- tocheck -lin kind_N = mkN "nature" | mkN "genre" masculine ; -- tocheck +lin police_N = mkN "police" feminine | mkN "policier" masculine ; --- split -- | police institution -- | policeman +lin kind_N = mkN "espèce" | mkN "genre" masculine ; lin lose_V2 = L.lose_V2 ; -lin lose_V = variants{}; -- L.lose_V2 ; -lin add_VS = variants{}; -- mkV2 (mkV "ajouter") | mkV2 (mkV "additionner") ; -- tocheck -lin add_V2 = mkV2 (mkV "ajouter") | mkV2 (mkV "additionner") ; -- tocheck -lin add_V = variants{}; -- mkV2 (mkV "ajouter") | mkV2 (mkV "additionner") ; -- tocheck -lin probably_Adv = variants{} ; -- -lin expect_VV = variants{}; -- mkV2V (mkV I.attendre_V2) ; -- tocheck -lin expect_VS = variants{}; -- mkV2V (mkV I.attendre_V2) ; -- tocheck -lin expect_V2V = mkV2V (mkV I.attendre_V2) ; -- tocheck -lin expect_V2 = variants{}; -- mkV2V (mkV I.attendre_V2) ; -- tocheck -lin expect_V = variants{}; -- mkV2V (mkV I.attendre_V2) ; -- tocheck -lin ever_Adv = mkAdv "jamais" | mkAdv "toujours" ; -- tocheck -lin available_A = mkA "disponible" ; -- tocheck -lin price_N = mkN "prix" masculine ; -- tocheck -lin little_A = mkA "petit" | mkA "cadet" ; -- tocheck -lin action_N = mkN "action" feminine | mkN "mechanisme" masculine ; -- tocheck -lin issue_N = mkN "problème" masculine | mkN "controverse" ; -- tocheck -lin issue_2_N = variants{} ; -- -lin issue_1_N = variants{} ; -- +lin lose_V = mkV L.lose_V2 ; +lin add_VS = mkVS (mkV "ajouter") ; +lin add_V2 = mkV2 (mkV "ajouter") ; +lin add_V = mkV "additionner" ; +lin probably_Adv = mkAdv "probablement" ; +lin expect_VV = mkVV (reflV (mkV I.attendre_V2)) ; +lin expect_VS = mkVS (reflV (mkV I.attendre_V2)) ; +lin expect_V2V = mkV2V (mkV I.attendre_V2) ; +lin expect_V2 = mkV2 (mkV I.attendre_V2) ; +lin expect_V = mkV I.attendre_V2 ; +lin ever_Adv = mkAdv "jamais" ; --- negative +lin available_A = mkA "disponible" ; +lin price_N = mkN "prix" masculine ; +lin little_A = mkA "petit" ; +lin action_N = mkN "action" feminine ; +lin issue_N = mkN "problème" masculine | mkN "controverse" ; +lin issue_2_N = mkN "numéro" ; +lin issue_1_N = mkN "problème" masculine | mkN "controverse" ; lin far_Adv = L.far_Adv ; -lin remember_VS = variants{}; -- mkV2 (mkV I.retenir_V2) | mkV2 (reflV (mkV "rappeler")) ; -- tocheck -lin remember_V2 = mkV2 (mkV I.retenir_V2) | mkV2 (reflV (mkV "rappeler")) ; -- tocheck -lin remember_V = variants{}; -- mkV2 (mkV I.retenir_V2) | mkV2 (reflV (mkV "rappeler")) ; -- tocheck -lin position_N = mkN "position" feminine ; -- tocheck -lin low_A = mkA "bas" ; -- tocheck -lin cost_N = mkN "coût" masculine ; -- tocheck -lin little_Det = variants{} ; -- -lin matter_N = mkN "matière" feminine | mkN "affaire" feminine ; -- tocheck -lin matter_1_N = variants{} ; -- -lin matter_2_N = variants{} ; -- -lin community_N = mkN "communauté" feminine ; -- tocheck -lin remain_VV = variants{}; -- mkV2 (mkV "demeurer") | mkV2 (mkV "rester") ; -- tocheck -lin remain_VS = variants{}; -- mkV2 (mkV "demeurer") | mkV2 (mkV "rester") ; -- tocheck -lin remain_VA = variants{}; -- mkV2 (mkV "demeurer") | mkV2 (mkV "rester") ; -- tocheck -lin remain_V2 = mkV2 (mkV "demeurer") | mkV2 (mkV "rester") ; -- tocheck -lin remain_V = variants{}; -- mkV2 (mkV "demeurer") | mkV2 (mkV "rester") ; -- tocheck -lin figure_N = mkN "figure" | mkN "forme" feminine | mkN "chiffre" | mkN "personnage" masculine | mkN "figure" feminine ; -- tocheck -lin figure_2_N = variants{} ; -- -lin figure_1_N = variants{} ; -- -lin type_N = mkN "caractère" masculine | mkN "type" masculine ; -- tocheck -lin research_N = mkN "recherche" feminine ; -- tocheck -lin actually_Adv = variants{} ; -- -lin education_N = mkN "éducation" feminine ; -- tocheck -lin fall_VA = variants{}; -- mkV2 (mkV I.devenir_V) | mkV2 (mkV "tomber") ; -- tocheck -lin fall_V2 = mkV2 (mkV I.devenir_V) | mkV2 (mkV "tomber") ; -- tocheck -lin fall_V = variants{}; -- mkV2 (mkV I.devenir_V) | mkV2 (mkV "tomber") ; -- tocheck +lin remember_VS = mkVS (reflV (mkV "rappeler")) | mkVS (reflV I.souvenir_V) ; +lin remember_V2 = mkV2 (reflV I.souvenir_V) P.genitive ; +lin remember_V = mkVS (reflV (mkV "rappeler")) | mkVS (reflV I.souvenir_V) ; +lin position_N = mkN "position" feminine ; +lin low_A = mkA "bas" ; +lin cost_N = mkN "coût" masculine ; +lin little_Det = mkDet "peu" ; +lin matter_N = mkN "matière" feminine | mkN "affaire" feminine ; +lin matter_1_N = mkN "matière" feminine ; +lin matter_2_N = mkN "affaire" feminine ; +lin community_N = mkN "communauté" feminine ; +lin remain_VV = deVV (mkV "rester") ; +lin remain_VS = mkVS (mkV "rester") ; +lin remain_VA = mkVA (mkV "rester") ; +lin remain_V2 = mkV2 (mkV "rester") ; +lin remain_V = mkV "demeurer" | mkV "rester" ; +lin figure_N = mkN "forme" feminine | mkN "personnage" masculine | mkN "figure" feminine ; --- +lin figure_2_N = mkN "chiffre" ; +lin figure_1_N = mkN "figure" ; +lin type_N = mkN "type" masculine | mkN "caractère" masculine ; +lin research_N = mkN "recherche" feminine ; +lin actually_Adv = mkAdv "couramment" ; +lin education_N = mkN "formation" | mkN "éducation" feminine ; +lin fall_VA = mkVA (etreV (mkV "tomber")) ; +lin fall_V2 = mkV2 (mkV (mkV I.faire_V2) "tomber") ; --- +lin fall_V = etreV (mkV "tomber") ; lin speak_V2 = L.speak_V2 ; -lin speak_V = mkV L.speak_V2 ; -- tocheck -lin few_N = variants{} ; -- +lin speak_V = mkV L.speak_V2 ; +lin few_N = mkN "peu" ; ---- bad cat ? comes from "a few" ? "un peu" is OK in that case lin today_Adv = L.today_Adv ; -lin enough_Adv = variants{} ; -- +lin enough_Adv = mkAdv "assez" ; lin open_V2 = L.open_V2 ; -lin open_V = variants{}; -- L.open_V2 ; +lin open_V = mkV L.open_V2 ; lin bad_A = L.bad_A ; lin buy_V2 = L.buy_V2 ; -lin buy_V = variants{}; -- L.buy_V2 ; -lin programme_N = variants{} ; -- -lin minute_N = mkN "minute" feminine | mkN "procès-verbal" masculine ; -- tocheck -lin moment_N = mkN "moment" masculine | mkN "instant" masculine ; -- tocheck +lin buy_V = mkV L.buy_V2 ; +lin programme_N = mkN "programme" masculine ; +lin minute_N = mkN "minute" feminine | mkN "procès-verbal" masculine ; --- split: five minutes -- | take minutes +lin moment_N = mkN "moment" masculine | mkN "instant" masculine ; lin girl_N = L.girl_N ; -lin age_N = mkN "âge" masculine | mkN "génération" feminine | mkN "époque" feminine ; -- tocheck -lin centre_N = variants{} ; -- -lin stop_VV = variants{}; -- L.stop_V ; -lin stop_V2 = mkV2 (mkV "arrêter") | mkV2 (mkV "cesser") | mkV2 (reflV (mkV "arrêter")) ; -- tocheck +lin age_N = mkN "âge" masculine | mkN "époque" feminine ; --- split -- | age of five -- | stone age +lin centre_N = mkN "centre" masculine ; +lin stop_VV = mkVV L.stop_V ; +lin stop_V2 = mkV2 (mkV "arrêter") | mkV2 (mkV "cesser") | mkV2 (reflV (mkV "arrêter")) ; lin stop_V = L.stop_V ; -lin control_N = mkN "contrôle" masculine ; -- tocheck -lin value_N = mkN "valeur" feminine | mkN "valeur" masculine | mkN "valeur" ; -- tocheck -lin send_VS = variants{}; -- mkV2V (mkV I.envoyer_V2) ; -- tocheck -lin send_V2V = mkV2V (mkV I.envoyer_V2) ; -- tocheck -lin send_V2 = variants{}; -- L.send_V3 ; -lin send_V = variants{}; -- L.send_V3 ; -lin health_N = mkN "santé" feminine ; -- tocheck -lin decide_VV = variants{}; -- mkV2 (mkV "décider") ; -- tocheck -lin decide_VS = variants{}; -- mkV2 (mkV "décider") ; -- tocheck -lin decide_V2 = mkV2 (mkV "décider") ; -- tocheck -lin decide_V = variants{}; -- mkV2 (mkV "décider") ; -- tocheck -lin main_A = mkA "principal" ; -- tocheck +lin control_N = mkN "contrôle" masculine ; +lin value_N = mkN "valeur" feminine ; +lin send_VS = mkVS (mkV I.envoyer_V2) ; ---- subcat +lin send_V2V = mkV2V (mkV I.envoyer_V2) P.accusative P.dative ; +lin send_V2 = I.envoyer_V2 ; +lin send_V = I.envoyer_V2 ; +lin health_N = mkN "santé" feminine ; +lin decide_VV = deVV (mkV "décider") ; +lin decide_VS = mkVS (mkV "décider") ; +lin decide_V2 = mkV2 (mkV "décider") ; +lin decide_V = mkV "décider" ; +lin main_A = mkA "principal" ; lin win_V2 = L.win_V2 ; -lin win_V = variants{}; -- L.win_V2 ; -lin understand_VS = variants{}; -- L.understand_V2 ; -lin understand_V2V = mkV2V (mkV I.comprendre_V2) ; -- tocheck +lin win_V = mkV I.vaincre_V2 ; +lin understand_VS = mkVS (mkV L.understand_V2) ; +lin understand_V2V = mkV2V (mkV I.comprendre_V2) ; lin understand_V2 = L.understand_V2 ; -lin understand_V = variants{}; -- L.understand_V2 ; -lin decision_N = mkN "décision" feminine ; -- tocheck -lin develop_V2 = mkV2 (reflV (mkV "développer")) | mkV2 (mkV "développer") ; -- tocheck -lin develop_V = variants{}; -- mkV2 (reflV (mkV "développer")) | mkV2 (mkV "développer") ; -- tocheck -lin class_N = mkN "classe" feminine | mkN "promotion" feminine | mkN "cours" masculine ; -- tocheck +lin understand_V = mkV L.understand_V2 ; +lin decision_N = mkN "décision" feminine ; +lin develop_V2 = mkV2 (mkV "développer") ; +lin develop_V = reflV (mkV "développer") ; +lin class_N = mkN "classe" feminine | mkN "cours" masculine ; --- split -- | upper class -- | history class lin industry_N = L.industry_N ; -lin receive_V2 = mkV2 (mkV I.recevoir_V2) ; -- tocheck -lin receive_V = variants{}; -- mkV2 (mkV I.recevoir_V2) ; -- tocheck +lin receive_V2 = mkV2 (mkV I.recevoir_V2) ; +lin receive_V = mkV I.recevoir_V2 ; lin back_N = L.back_N ; -lin several_Det = variants{} ; -- -lin return_V2V = mkV2V (mkV I.rendre_V2) | mkV2V (mkV I.revenir_V) ; -- tocheck -lin return_V2 = variants{}; -- mkV2V (mkV I.rendre_V2) | mkV2V (mkV I.revenir_V) ; -- tocheck -lin return_V = variants{}; -- mkV2V (mkV I.rendre_V2) | mkV2V (mkV I.revenir_V) ; -- tocheck -lin build_V2 = mkV2 (mkV I.construire_V2) ; -- tocheck -lin build_V = variants{}; -- mkV2 (mkV I.construire_V2) ; -- tocheck -lin spend_V2 = mkV2 (mkV "dépenser") | mkV2 (mkV "passer") ; -- tocheck -lin spend_V = variants{}; -- mkV2 (mkV "dépenser") | mkV2 (mkV "passer") ; -- tocheck -lin force_N = mkN "pouvoir" masculine | mkN "force" feminine | mkN "forces" | mkN "truc" masculine ; -- tocheck -lin condition_N = variants{} ; -- -lin condition_1_N = variants{} ; -- -lin condition_2_N = variants{} ; -- +lin several_Det = mkDet "plusieurs" "plusieurs" plural ; +lin return_V2V = mkV2V (mkV I.rendre_V2) | mkV2V (mkV I.revenir_V) ; ---- subcat +lin return_V2 = mkV2 "retourner" | I.rendre_V2 ; +lin return_V = mkV I.revenir_V | mkV "retourner" ; +lin build_V2 = mkV2 (mkV I.construire_V2) ; +lin build_V = mkV "bâtir" | mkV I.construire_V2 ; +lin spend_V2 = mkV2 (mkV "dépenser") | mkV2 (mkV "passer") ; --- split -- | spend money -- | spend time +lin spend_V = mkV "dépenser" ; +lin force_N = mkN "force" feminine ; +lin condition_N = mkN "condition" ; +lin condition_1_N = mkN "condition" ; +lin condition_2_N = mkN "condition" ; lin paper_N = L.paper_N ; -lin off_Prep = variants{} ; -- -lin major_A = mkA "important" ; -- tocheck -lin describe_VS = variants{}; -- mkV2 (mkV I.décrire_V2) ; -- tocheck -lin describe_V2 = mkV2 (mkV I.décrire_V2) ; -- tocheck -lin describe_V = variants{}; -- mkV2 (mkV I.décrire_V2) ; -- tocheck -lin agree_VV = variants{}; -- mkV2 (mkV "accorder") ; -- tocheck -lin agree_VS = variants{}; -- mkV2 (mkV "accorder") ; -- tocheck -lin agree_V2 = mkV2 (mkV "accorder") ; -- tocheck -lin agree_V = variants{}; -- mkV2 (mkV "accorder") ; -- tocheck -lin economic_A = variants{} ; -- -lin increase_V2 = mkV2 (mkV "augmenter") ; -- tocheck -lin increase_V = variants{}; -- mkV2 (mkV "augmenter") ; -- tocheck -lin upon_Prep = variants{} ; -- -lin learn_VV = variants{}; -- L.learn_V2 ; -lin learn_VS = variants{}; -- L.learn_V2 ; +lin off_Prep = P.mkPrep ("à part") P.genitive ; +lin major_A = mkA "majeur" ; +lin describe_VS = mkVS (mkV I.décrire_V2) ; +lin describe_V2 = I.décrire_V2 ; +lin describe_V = mkV I.décrire_V2 ; ---- subcat +lin agree_VV = deVV (reflV (mkV "accorder")) ; --- ?? +lin agree_VS = mkVS (reflV (mkV "accorder")) ; --- ?? +lin agree_V2 = mkV2 (mkV "accorder") ; +lin agree_V = reflV (mkV "accorder") ; --- être d'accord ?? +lin economic_A = mkA "économique" ; +lin increase_V2 = mkV2 (mkV "augmenter") ; +lin increase_V = reflV (mkV "augmenter") ; +lin upon_Prep = mkPrep "sur" ; +lin learn_VV = aVV (mkV L.learn_V2) ; +lin learn_VS = mkVS (mkV L.learn_V2) ; lin learn_V2 = L.learn_V2 ; -lin learn_V = variants{}; -- L.learn_V2 ; -lin general_A = mkA "d'ensemble" | mkA "général" ; -- tocheck +lin learn_V = mkV L.learn_V2 ; +lin general_A = mkA "général" ; ---- END edits by AR lin century_N = mkN "centurie" feminine | mkN "siècle" masculine ; -- tocheck lin therefore_Adv = mkAdv "donc" ; -- tocheck lin father_N = mkN "père" masculine ; -- tocheck diff --git a/lib/src/translator/todo/check-dictionary.t2t b/lib/src/translator/todo/check-dictionary.t2t index 13436f613..d8883ecc9 100644 --- a/lib/src/translator/todo/check-dictionary.t2t +++ b/lib/src/translator/todo/check-dictionary.t2t @@ -29,7 +29,7 @@ Follow these steps for your language. For instance, ToCheckFre.gf, with Fre subs + Mark the last rule you edit with "---- END edits by AR", where AR is your initials. + Put, as the first line of the file, a comment indicating your last edited rule: ``` - ---- checked by AR till once_Adv + ---- checked by AR till once_Adv in the BNC order ``` + Make sure the resulting file compiles again. + Perform ``diff`` with the old and the new file, just to make sure your changes look reasonable. @@ -52,22 +52,21 @@ The already split senses are explained [here ../senses-in-Dictionary.txt]. ==Guidelines== When editing a lin rule, do one of the following: -- **accept the rule as it is**: replace the tail comment after the rule's terminating semicolon, if there is one, by your initials - in a systematic way. For example: +- **accept the rule as it is**: remove the tail comment after the rule's terminating semicolon, if there is one. For example: ``` lin maintain_V2 = mkV2 (mkV I.entretenir_V2) | mkV2 (mkV I.maintenir_V2) ; -- tocheck ``` becomes ``` - lin maintain_V2 = mkV2 (mkV I.entretenir_V2) | mkV2 (mkV I.maintenir_V2) ; -- AR + lin maintain_V2 = mkV2 (mkV I.entretenir_V2) | mkV2 (mkV I.maintenir_V2) ; ``` - - change the linearization, and if the result is OK for you, just leaving your initials as comment. For example, + - change the linearization, and if the result is OK for you, also deleting the comment. For example, ``` - lin obviously_Adv = variants{} ; + lin obviously_Adv = variants{} ; -- ``` becomes ``` - lin obviously_Adv = mkAdv "évidemment" ; -- AR + lin obviously_Adv = mkAdv "évidemment" ; ``` - **suggest split of sense**: add a comment prefixed by "--- split" and more senses, explaining them. For example, ``` @@ -75,7 +74,7 @@ When editing a lin rule, do one of the following: ``` might become ``` - lin labour_N = mkN "travail" "travaux" masculine ; --- mkN "accouchement" childbirth labour -- AR + lin labour_N = mkN "travail" "travaux" masculine ; --- mkN "accouchement" childbirth labour ``` To check the meanings of senses that have already been split (by using numbers, e.g. ``time_1_N``), look up the explanations in [Dictionary.gf ../Dictionary.gf]. @@ -86,7 +85,7 @@ When editing a lin rule, do one of the following: ``` might become ``` - lin back_Adv = mkAdv "en retour" ; ---- no exact translation in Fre -- AR + lin back_Adv = mkAdv "en retour" ; ---- no exact translation in Fre ``` - **report on bad subcategory instance** (a common special case of anomaly):