German complete (with some bugs and uncertainties)

This commit is contained in:
aarne
2006-01-17 20:31:30 +00:00
parent 89cd3d352d
commit db066b1233
5 changed files with 111 additions and 74 deletions

View File

@@ -3,9 +3,10 @@
concrete BasicGer of Basic = CatGer ** open Prelude, ParadigmsGer in {
flags
optimize=values ;
optimize=all_subs ;
lin
add_V3 = dirV3 (prefixV "hinzu" (regV "fügen")) zu_Prep ;
airplane_N = regN "Flugzeug" ;
already_Adv = mkAdv "schon" ;
answer_V2S = mkV2S (regV "antworten") datPrep ;
@@ -15,42 +16,42 @@ lin
ask_V2Q = mkV2Q (regV "fragen") accPrep ;
baby_N = reg2N "Baby" "babies" neuter ; ----
bad_A = regA "schlecht" ;
bank_N = reg2N "Bank" "Banken" feminine ; ----
bank_N = reg2N "Bank" "Banken" feminine ;
beautiful_A = regA "schön" ;
become_VA = mkVA (mkV "werden" "wird" "werd" "wurde" "würde" "geworden") ;
become_VA = mkVA (mkV "werde" "wird" "werd" "wurde" "würde" "geworden") ;
beer_N = reg2N "Bier" "Biere" neuter ;
---- beg_V2V = mkV2V (mkV "be" "ber""be" "blad" "bett" "bedd") [] "att" ;
big_A = mkA "groß" "groß" "größer""größt" ;
beg_V2V = mkV2V (mkV "bitten" "bittet" "bitte" "bat" "bäte" "gebeten") accPrep ;
big_A = mkA "groß" "größer""größte" ;
bike_N = reg2N "Fahrrad" "Fahrräder" neuter ;
---- bird_N = reg2N "gel" "fåglar" ;
bird_N = reg2N "Vogel" "Vögel" masculine ;
black_A = regA "schwarz" ;
blue_A = regA "blau";
boat_N = reg2N "Boot" "Boote" neuter ;
book_N = reg2N "Buch" "Bücher" neuter ;
-- boot_N = reg2N "stövel" "stövlar" ;
boot_N = reg2N "Stiefel" "Stiefel" masculine ;
boss_N = reg2N "Chef" "Chefe" masculine ; ----
boy_N = reg2N "Junge" "Jungen" masculine ;
bread_N = reg2N "Brot" "Brote" neuter ; ----
bread_N = reg2N "Brot" "Brote" neuter ;
break_V2 = dirV2
(irregV "zerschlagen" "zerschlägt" "zerschlug" "zerschlüge" "zerschlagen") ;
broad_A = regA "breit" ;
brother_N2 = mkN2 (reg2N "Bruder" "Brüder" masculine) zu_Prep ; ----
brother_N2 = mkN2 (reg2N "Bruder" "Brüder" masculine) von_Prep ;
brown_A = regA "braun" ;
---- butter_N = regN "smör" ;
butter_N = reg2N "Butter" "Butter" feminine ; ---- infl
buy_V2 = dirV2 (regV "kaufen") ;
---- camera_N = regN "kamera" ;
camera_N = reg2N "Kamera" "Kameras" feminine ;
cap_N = regN "Mütze" ;
car_N = reg2N "Wagen" "Wagen" masculine ;
carpet_N = regN "Teppich" ;
cat_N = regN "Katze" ;
---- ceiling_N = regN "tak" ;
ceiling_N = reg2N "Dach" "Dächer" neuter ;
chair_N = reg2N "Stuhl" "Stühle" masculine ;
cheese_N = regN "Käse" ;
child_N = reg2N "Kind" "Kinder" neuter ;
church_N = regN "Kirche" ;
city_N = reg2N "Stadt" "Städte" feminine ;
clean_A = regA "rein" ;
clever_A = regA "klug" ; ----
clever_A = mkA "klug" "klüger" "klügste" ;
close_V2 = dirV2 (irregV "schliessen" "schließt" "schloß" "schlöße" "geschlossen") ;
coat_N = regN "Jacke" ;
cold_A = regA "Kalt" ;
@@ -62,6 +63,7 @@ lin
die_V = seinV (irregV "sterben" "stirbt" "starb" "stärbe" "gestorben") ;
distance_N3 = mkN3 (regN "Entfernung") von_Prep zu_Prep ;
dirty_A = regA "schmutzig" ;
do_V2 = dirV2 (irregV "tun" "tut" "tat" "täte" "getan") ;
doctor_N = reg2N "Arzt" "Ärzte" masculine ;
dog_N = regN "Hund" ;
door_N = reg2N "Tür" "Türe" feminine ;
@@ -69,7 +71,7 @@ lin
easy_A2V = mkA2V (regA "leicht") (mkPrep "für" accusative) ;
eat_V2 = dirV2 (irregV "essen" "ißt" "aß" "äße" "gegessen") ;
empty_A = regA "leer" ; ---- check infl
enemy_N = regN "Feind" ; ----
enemy_N = regN "Feind" ;
factory_N = regN "Fabrike" ;
father_N2 = mkN2 (reg2N "Vater" "Väter" masculine) von_Prep ;
fear_VS = mkVS (regV "fürchten") ;
@@ -84,16 +86,16 @@ lin
garden_N = reg2N "Garten" "Gärten" masculine ;
girl_N = reg2N "Mädchen" "Mädchen" neuter ;
glove_N = regN "Handschuh" ;
gold_N = regN "Gold" ; ----
good_A = mkA "gut" "gut" "besser" "best" ;
gold_N = reg2N "Gold" "Golde" neuter ; ---- infl
good_A = mkA "gut" "besser" "beste" ;
go_V = seinV (irregV "gehen" "geht" "ging" "ginge" "gegangen") ;
green_A = regA "grün" ;
harbour_N = reg2N "Hafen" "Häfen" masculine ;
hate_V2 = dirV2 (regV "Hassen") ;
hat_N = reg2N "Hut" "Hüte" masculine ;
---- have_V2 = dirV2 (mkV "ha" "har" "ha" "hade" "haft" "haft") ; ---- pp
have_V2 = dirV2 haben_V ;
hear_V2 = dirV2 (regV "hören") ;
---- hill_N = regN "kulle" ;
hill_N = regN "Hügel" ;
hope_VS = mkVS (regV "hoffen") ;
horse_N = reg2N "Pferd" "Pferde" neuter ;
hot_A = regA "heiß" ;
@@ -101,46 +103,48 @@ lin
important_A = regA "wichtig" ;
industry_N = regN "Industrie" ;
iron_N = reg2N "Eisen" "Eisen" neuter ;
jump_V = seinV (irregV "springen" "springt" "sprang" "spränge" "gesprungen") ;
king_N = regN "König" ;
know_V2 = dirV2 (irregV "wissen" "weiß" "wußte" "wüßte" "gewußt") ; ---- infl
---- lake_N = mkN "sjö" "sjön" "sjöar" "sjöarna" ;
lake_N = reg2N "See" "Seen" masculine ; --- infl
lamp_N = regN "Lampe";
learn_V2 = dirV2 (regV "lernen") ;
---- leather_N = regN "Leder" ;
leave_V2 =
dirV2 (irregV "verlassen" "verläßt" "verließ" "verliesse" "verlassen") ;
leather_N = reg2N "Leder" "Leder" neuter ;
leave_V2 = dirV2 (irregV "verlassen" "verläßt" "verließ" "verliesse" "verlassen") ;
like_V2 = dirV2 (irregV "magen" "mag" "mochte" "möchte" "gemocht") ;
listen_V2 = mkV2 (prefixV "zu" (regV "hören")) datPrep ; ---- dat
live_V = regV "leben" ;
long_A = mkA "lang" "lang" "länger" "längst" ;
long_A = mkA "lang" "länger" "längste" ;
lose_V2 = dirV2 (irregV "verlieren" "verliert" "verlor" "verlöre" "verloren") ;
love_N = regN "Liebe" ;
love_V2 = dirV2 (regV "lieben") ;
man_N = reg2N "Mann" "Männer" masculine ;
married_A2 = mkA2 (regA "verheiratet") (mkPrep "mit" dative) ;
meat_N = reg2N "Fleisch" "Fleische" neuter ; ---- Pl
milk_N = reg2N "Milch" "Milchen" feminine ; ---- Pl
moon_N = regN "Mond" ; ---- Pl
meat_N = reg2N "Fleisch" "Fleische" neuter ; ---- infl
milk_N = reg2N "Milch" "Milchen" feminine ; ---- infl
moon_N = regN "Mond" ;
mother_N2 = mkN2 (reg2N "Mutter" "Mütter" feminine) von_Prep ;
mountain_N = regN "Berg" ;
music_N = reg2N "Musik" "Musiken" feminine ;
narrow_A = regA "schmal" ;
new_A = regA "neu" ;
newspaper_N = regN "Zeitung" ;
oil_N = regN "Öl" ; ----
old_A = mkA "alt" "alt" "älter" "ältest" ;
now_Adv = mkAdv "jetzt" ;
number_N = reg2N "Zahl" "Zahlen" feminine ;
oil_N = reg2N "Öl" "Öle" neuter ;
old_A = mkA "alt" "älter" "älteste" ;
open_V2 = dirV2 (regV "öffnen") ;
paint_V2A =
mkV2A (irregV "streichen" "streicht" "strich" "striche" "gestrichen") accPrep ; ----
paint_V2A = mkV2A (regV "malen") accPrep ;
paper_N = reg2N "Papier" "Papiere" neuter ;
peace_N = regN "Frieden" ; ----
peace_N = mkN "Friede" "Frieden" "Frieden" "Friedens" "Frieden" "Frieden" masculine ;
pen_N = regN "Bleistift" ; ----
planet_N = regN "Planete" ; ----
planet_N = reg2N "Planet" "Planeten" masculine ;
plastic_N = reg2N "Plastik" "Plastiken" feminine ; ----
play_V2 = dirV2 (regV "spielen") ;
policeman_N = reg2N "Polizist" "Polizisten" masculine ;
priest_N = regN "Priest" ; ----
priest_N = regN "Priester" ;
probable_AS = mkAS (regA "wahrscheinlich") ;
put_V2 = dirV2 (regV "setzen") ;
queen_N = reg2N "Königin" "königinnen" feminine ;
radio_N = reg2N "Radio" "Radios" neuter ; ----
rain_V0 = mkV0 (regV "regnen") ;
@@ -150,8 +154,8 @@ lin
restaurant_N = reg2N "Restaurant" "Restaurants" neuter ;
river_N = reg2N "Fluß" "Flüße" masculine ;
rock_N = regN "Stein" ;
---- roof_N = regN "tak" ;
---- rubber_N = mkN "gummi" "gummit" "gummin" "gummina" ;
roof_N = reg2N "Dach" "Dächer" neuter ;
rubber_N = reg2N "Gummi" "Gummis" neuter ;
run_V = seinV (irregV "laufen" "läuft" "lief" "liefe" "gelaufen") ;
say_VS = mkVS (regV "sagen") ;
school_N = regN "Schule";
@@ -161,25 +165,27 @@ lin
see_V2 = dirV2 (irregV "sehen" "sieht" "sah" "sähe" "gesehen") ;
sell_V3 = accdatV3 (regV "verkaufen") ;
send_V3 = accdatV3 (regV "schicken") ;
sheep_N = reg2N "Schaf" "Schäfe" feminine ; ----
ship_N = regN "Schiff" ; ----
shirt_N = reg2N "Hemd" "Hemde" neuter ; ----
sheep_N = reg2N "Schaf" "Schafe" neuter ;
ship_N = reg2N "Schiff" "Schiffe" neuter ;
shirt_N = reg2N "Hemd" "Hemden" neuter ; ---- infl
shoe_N = regN "Schuh" ;
shop_N = reg2N "Laden" "Läden" masculine ;
short_A = regA "kurz" ;
silver_N = reg2N "Silber" "Silber" neuter ; ----
silver_N = reg2N "Silber" "Silber" neuter ; ---- infl
sister_N = reg2N "Schwester" "Schwester" feminine ;
sleep_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ;
small_A = regA "Klein" ;
snake_N = regN "Schlange" ;
sock_N = reg2N "Strumpf" "Strümpfe" masculine ; ----
sock_N = reg2N "Strumpf" "Strümpfe" masculine ;
song_N = reg2N "Lied" "Lieder" neuter ;
speak_V2 = dirV2 (irregV "sprechen" "spricht" "sprach" "spräche" "gesprochen") ;
star_N = regN "Sterne" ;
steel_N = regN "Stahl" ; ----
stone_N = regN "Stein" ; ----
---- stove_N = regN "spis" ;
steel_N = regN "Stahl" ;
stone_N = regN "Stein" ;
stop_V = seinV (irregV "halten" "hält" "hielt" "hielte" "gehalten") ;
stove_N = regN "Herd" ;
student_N = reg2N "Student" "Studenten" masculine ;
stupid_A = mkA "dumm" "dumm" "dümmer" "dümmst" ; ----
stupid_A = mkA "dumm" "dümmer" "dümmste" ; ----
sun_N = regN "Sonne" ;
switch8off_V2 = dirV2 (prefixV "aus" (regV "schalten")) ;
switch8on_V2 = dirV2 (prefixV "ein" (regV "schalten")) ;
@@ -192,7 +198,7 @@ lin
thin_A = regA "dünn" ;
train_N = reg2N "Zug" "Züge" masculine ;
travel_V = regV "reisen" ;
tree_N = reg2N "Baum" "Bäume" masculine ; ----
tree_N = reg2N "Baum" "Bäume" masculine ;
---- trousers_N = regN "trousers" ; ---- pl t !
ugly_A = regA "häßlich" ;
understand_V2 = dirV2 (irregV "verstehen" "versteht" "verstand" "verstände" "verstanden") ;
@@ -200,28 +206,19 @@ lin
village_N = reg2N "Dorf" "Dörfer" neuter ;
wait_V2 = mkV2 (regV "warten") (mkPrep "auf" accusative) ;
walk_V = seinV (irregV "gehen" "geht" "ging" "ginge" "gegangen") ;
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
war_N = regN "Krieg" ; ----
warm_A = mkA "warm" "wärmer" "wärmste" ;
war_N = regN "Krieg" ;
watch_V2 = mkV2 (regV "schauen") (mkPrep "an" accusative) ;
water_N = reg2N "Wasser" "Wasser" neuter ;
white_A = regA "weiß" ;
window_N = reg2N "Fenster" "Fenster" neuter ; ----
window_N = reg2N "Fenster" "Fenster" neuter ;
wine_N = regN "Wein" ;
win_V2 = dirV2 (irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen") ; ----
win_V2 = dirV2 (irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen") ;
woman_N = reg2N "Frau" "Frauen" feminine ;
wonder_VQ = mkVQ (reflV (regV "wundern") accusative) ; ----
wood_N = reg2N "Holz" "Hölzer" neuter ; ----
wonder_VQ = mkVQ (reflV (regV "wundern") accusative) ;
wood_N = reg2N "Holz" "Hölzer" neuter ;
write_V2 = dirV2 (irregV "schreiben" "schreibt" "schrieb" "schriebe" "geschrieben") ;
yellow_A = regA "gelb" ;
young_A = mkA "jung" "jung" "jünger" "jüngst" ;
do_V2 = dirV2 (irregV "tun" "tut" "tat" "täte" "getan") ;
now_Adv = mkAdv "jetzt" ;
song_N = reg2N "Lied" "Lieder" neuter ;
-- add_V3 = mkV3 (partV (irregV "lägga" "lade" "lagt") "till") [] "till" ;
number_N = reg2N "Zahl" "Zahlen" feminine ;
put_V2 = dirV2 (regV "setzen") ;
stop_V = seinV (irregV "halten" "hält" "hielt" "hielte" "gehalten") ;
-- jump_V = regV "hoppa" ;
young_A = mkA "jung" "jünger" "jüngste" ;
} ;

View File

@@ -1,5 +1,7 @@
concrete NumeralGer of Numeral = CatGer ** open MorphoGer in {
flags optimize = all_subs ;
lincat
Digit = {s : DForm => CardOrd => Str} ;
Sub10 = {s : DForm => CardOrd => Str} ;

View File

@@ -105,9 +105,9 @@ oper
--2 Adjectives
-- Adjectives need four forms: two for the positive and one for the other degrees.
-- Adjectives need three forms, one for each degree.
mkA : (x1,_,_,x4 : Str) -> A ; -- gut,gut,besser,best
mkA : (x1,_,x3 : Str) -> A ; -- gut,besser,beste
-- The regular adjective formation works for most cases, and includes
-- variations such as "teuer - teurer", "böse - böser".
@@ -215,7 +215,7 @@ oper
mkVS : V -> VS ;
mkV2S : V -> Prep -> V2S ;
mkVV : V -> VV ;
mkV2V : V -> Prep -> Prep -> V2V ;
mkV2V : V -> Prep -> V2V ;
mkVA : V -> VA ;
mkV2A : V -> Prep -> V2A ;
mkVQ : V -> VQ ;
@@ -260,7 +260,8 @@ oper
regN : Str -> N = \hund -> case hund of {
_ + "e" => mkN hund hund hund hund (hund + "n") (hund + "n") Fem ;
_ + ("ion" | "ung") => mkN hund hund hund hund (hund + "en") (hund + "en") Fem ;
_ => mkN hund hund hund (genitS hund) (hund + "e") (hund + "en") Masc
_ + ("er" | "en" | "el") => mkN hund hund hund (genitS hund) hund (hund + "n") Masc ;
_ => mkN hund hund hund (genitS hund) (hund + "e") (hund + "en") Masc
} ;
reg2N : (x1,x2 : Str) -> Gender -> N = \hund,hunde,g ->
@@ -295,13 +296,18 @@ oper
regPN = \horst ->
mkPN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) ;
mkA : (x1,_,_,x4 : Str) -> A = \a,b,c,d ->
MorphoGer.mkA a b c d ** {lock_A = <>} ;
mkA : (x1,_,x3 : Str) -> A = \a,b,c ->
let aa : Str = case a of {
teu + "er" => teu + "r" ;
mud + "e" => mud ;
_ => a
} in
MorphoGer.mkA a aa b (init c) ** {lock_A = <>} ;
regA : Str -> A = \a -> case a of {
teu + "er" => mkA a (teu + "re") (teu + "rer") (teu + "rest") ;
_ + "e" => mkA a a (a + "r") (a + "st") ;
_ => mkA a a (a + "er") (a + "est")
teu + "er" => mkA a (teu + "rer") (teu + "rest") ;
_ + "e" => mkA a (a + "r") (a + "st") ;
_ => mkA a (a + "er") (a + "est")
} ;
invarA = \s -> {s = \\_,_ => s ; lock_A = <>} ; ---- comparison
@@ -363,6 +369,10 @@ oper
prefix = v.prefix ; lock_V = v.lock_V ; aux = v.aux ; vtype = v.vtype
} ;
haben_V = MorphoGer.haben_V ** {lock_V = <>} ;
sein_V = MorphoGer.sein_V ** {lock_V = <>} ;
werden_V = MorphoGer.werden_V ** {lock_V = <>} ;
mkV2 v c = v ** {c2 = c ; lock_V2 = <>} ;
dirV2 v = mkV2 v (mkPrep [] accusative) ;
datV2 v = mkV2 v (mkPrep [] dative) ;
@@ -382,7 +392,7 @@ oper
mkV0 v = v ** {lock_V = <>} ;
mkV2S v p = mkV2 v p ** {lock_V2 = <>} ;
mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ;
mkV2V v p = mkV2 v p ** {lock_V2 = <>} ;
mkVA v = v ** {lock_VA = <>} ;
mkV2A v p = mkV2 v p ** {lock_V2A = <>} ;
mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ;

View File

@@ -57,6 +57,11 @@ concrete StructuralGer of Structural = CatGer **
"mußte" "mußtest" "mußten" "mußtet"
"mußte" "gemüßt" []
VHaben) ;
one_Quant = {
s = \\g,c => "ein" + pronEnding ! GSg g ! c ;
n = Sg ;
a = Strong
} ;
only_Predet = {s = \\_,_,_ => "nur"} ;
no_Phr = ss ["Nein ."] ;
on_Prep = mkPrep "auf" Dat ;
@@ -70,7 +75,11 @@ concrete StructuralGer of Structural = CatGer **
so_AdA = ss "so" ;
somebody_NP = nameNounPhrase {s = caselist "jemand" "jemanden" "jemandem" "jemands"} ;
somePl_Det = detLikeAdj Pl "einig" ;
-- someSg_Det =
someSg_Det = {
s = \\g,c => "ein" + pronEnding ! GSg g ! c ;
n = Sg ;
a = Strong
} ;
something_NP = nameNounPhrase {s = \\_ => "etwas"} ;
somewhere_Adv = ss "irgendwo" ;
that_Quant = detLikeAdj Sg "jen" ;
@@ -79,11 +88,13 @@ concrete StructuralGer of Structural = CatGer **
there7to_Adv = ss "dahin" ;
there7from_Adv = ss ["daher"] ;
therefore_PConj = ss "deshalb" ;
these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ;
these_Quant = detLikeAdj Pl "dies" ;
they_Pron = mkPronPers "sie" "sie" "ihnen" "ihrer" "ihr" Pl P3 ;
this_Quant = detLikeAdj Sg "dies" ;
this_NP = nameNounPhrase {s = caselist "dies" "dies" "diesem" "dieses"} ; ----
-- those_NP
those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ;
those_Quant = detLikeAdj Pl "jen" ;
thou_Pron = mkPronPers "du" "dich" "dir" "deiner" "dein" Sg P2 ;
through_Prep = mkPrep "durch" Acc ;

View File

@@ -197,7 +197,7 @@ StructuralGer: almost complete with some determiner forms to revisit
ParadigmsGer: almost complete with verb form variations to revisit
MorphoGer: very few functions in this module
16/1
16/1 (4h)
ParamGer: removed Strong/Weak from AForm to save lexicon storage. Done in agrAdj instead.
Only affects NounGer and QuestionGer. Notice that making case analysis on <a,gn,c> is
@@ -208,5 +208,22 @@ ParadigmsGer: completed
ParamGer: VType
ResGer, ParadigmsGer: the consequences of this
BasicGer; started
BasicGer; started. Strategy: fill all you know without consulting dictionary;
mark ---- before what you dont know, and after what you are uncertain about.
Insight: to write a *resource* grammar you need not be a fluent speaker, but
just to understand what grammar books say. It is when writing application
grammars that you need to make stylistic judgements to do the right choices
from the resource.
17/1
MorphoGer: for numerals
NumeralGer: all
> make stat
66123 german/NumeralGer.gfc
added flags optimize=all_subs ;
17046 german/NumeralGer.gfc
BasicGer: completed. Idea: work in pairs, one consulting the dictionary (or
giving native speaker advice)