German lexicon started

This commit is contained in:
aarne
2006-01-04 20:17:31 +00:00
parent 946ba9a93b
commit 15c26d6c11
4 changed files with 90 additions and 72 deletions

View File

@@ -20,31 +20,32 @@ concrete CatGer of Cat = open ResGer, Prelude, (R = ParamX) in {
-- s2 : Agr => Str
-- } ;
--
-- V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
-- V2, VV, V2A = Verb ** {c2 : Str} ;
-- V3 = Verb ** {c2, c3 : Str} ;
--
-- AP = {s : Agr => Str ; isPre : Bool} ;
-- Comp = {s : Agr => Str} ;
V, VS, VQ, VA = Verb ; -- = {s : VForm => Str} ;
V2, VV, V2A = Verb ** {c2 : Preposition} ;
V3 = Verb ** {c2, c3 : Preposition} ;
AP = {s : AForm => Str ; isPre : Bool} ;
Comp = {s : Str} ;
--
-- SC = {s : Str} ;
--
-- A = {s : AForm => Str} ;
-- A2 = {s : AForm => Str ; c2 : Str} ;
--
-- Adv, AdV, AdA, AdS, AdN = {s : Str} ;
-- Prep = {s : Str} ;
--
-- Det, Quant = {s : Str ; n : Number} ;
-- Predet, Num, Ord = {s : Str} ;
--
A = {s : Degree => AForm => Str} ;
A2 = {s : Degree => AForm => Str ; c2 : Preposition} ;
Adv, AdV, AdA, AdS, AdN = {s : Str} ;
Prep = {s : Str ; c : Case} ;
Det, Quant = {s : Gender => Case => Str ; n : Number ; a : Adjf} ;
Predet = {s : Number => Gender => Case => Str} ;
Num, Ord = {s : Gender => Case => Str} ;
CN = {s : Adjf => Number => Case => Str ; g : Gender} ;
N = {s : Number => Case => Str ; g : Gender} ;
-- PN = {s : Case => Str} ;
-- Pron, NP = {s : Case => Str ; a : Agr} ;
-- N2 = {s : Number => Case => Str} ** {c2 : Str} ;
-- N3 = {s : Number => Case => Str} ** {c2,c3 : Str} ;
--
PN = {s : Case => Str} ;
Pron, NP = {s : Case => Str ; a : Agr} ;
N2 = {s : Number => Case => Str ; g : Gender} ** {c2 : Preposition} ;
N3 = {s : Number => Case => Str ; g : Gender} ** {c2,c3 : Preposition} ;
-- IP = {s : Case => Str ; n : Number} ;
-- IDet = {s : Str ; n : Number} ;
-- IAdv = {s : Str} ;

View File

@@ -1,25 +1,27 @@
concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
--
-- lin
-- walk_V = regV "walk" ;
-- help_V2 = regV "help" ** {c2 = []} ;
-- show_V3 = regV "show" ** {c2 = [] ; c3 = "to"} ;
lin
walk_V = mkV "gehen" "geht" "geh" "ging" "ginge" "gegangen" ;
help_V2 = mkV "helfen" "hilft" "hilf" "half" "hälfe" "geholfen" **
{c2 = {s = [] ; c = Dat}} ;
show_V3 = regV "zeigen" **
{c2 = {s = [] ; c = Acc} ; c3 = {s = [] ; c = Dat}} ;
-- want_VV = regV "want" ** {c2 = "to"} ;
-- claim_VS = regV "claim" ;
-- ask_VQ = regV "ask" ;
--
-- dog_N = regN "dog" ;
claim_VS = no_geV (regV "behaupten") ;
ask_VQ = regV "fragen" ;
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
-- son_N2 = regN "son" ** {c2 = "of"} ;
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
--
-- warm_A = regA "warm" ;
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
-- close_A2 = regA "close" ** {c2 = "to"} ;
--
-- here_Adv = {s = "here"} ;
-- very_AdA = {s = "very"} ;
-- always_AdV = {s = "always"} ;
--
-- only_Predet = {s = "only"} ;
here_Adv = {s = "hier"} ;
very_AdA = {s = "sehr"} ;
always_AdV = {s = "immer"} ;
only_Predet = {s = \\_,_,_ => "nur"} ;
-- all_Predet = {s = "only"} ;
-- this_Quant = {s = "this" ; n = Sg} ;
-- these_Quant = {s = "these" ; n = Pl} ;

View File

@@ -22,22 +22,21 @@ resource ParamGer = ParamX ** {
GenNum = GSg Gender | GPl ;
-- The predicative form of adjectives is not inflected further.
AForm = APred | AMod Adjf GenNum Case ;
---- Agreement of $NP$ is a record. We'll add $Gender$ later.
--
-- oper
-- Agr = {n : Number ; p : Person} ;
--
-- param
-- Gender = Neutr | Masc | Fem ;
--
oper Agr = {n : Number ; p : Person} ;
----2 For $Adjective$
-- The predicative form of adjectives is not inflected further.
param
AForm = APred | AMod Adjf GenNum Case ;
--2 For $Verb$
VForm =
param VForm =
VInf
| VPresInd Number Person
| VPresSubj Number Person
@@ -47,20 +46,11 @@ resource ParamGer = ParamX ** {
| VPresPart AForm
| VPastPart AForm ;
-- The order of sentence is depends on whether it is used as a main
-- clause, inverted, or subordinate.
---- Only these five forms are needed for open-lexicon verbs.
Order = ODir | OQuest ;
--
-- param
-- VForm = VInf | VPres | VPast | VPPart | VPresPart ;
--
---- The order of sentence is needed already in $VP$.
--
-- Order = ODir | OQuest ;
--
--
----2 For $Adjective$
--
-- AForm = AAdj Degree | AAdv ;
--
----2 For $Relative$
--

View File

@@ -35,7 +35,7 @@ resource ResGer = ParamGer ** open Prelude in {
Noun : Type = {s : Number => Case => Str ; g : Gender} ;
mkNoun : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun =
mkN : (x1,_,_,_,_,x6 : Str) -> Gender -> Noun =
\mann, mannen, manne, mannes, maenner, maennern, g -> {
s = table {
Sg => caselist mann mannen manne mannes ;
@@ -47,17 +47,17 @@ resource ResGer = ParamGer ** open Prelude in {
-- But we never need all the six forms at the same time. Often
-- we need just two or four forms.
mkNoun4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
mkNoun wein wein wein weines weine weinen ;
mkN4 : (x1,_,_,x4 : Str) -> Gender -> Noun = \wein,weines,weine,weinen ->
mkN wein wein wein weines weine weinen ;
mkNoun2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen ->
mkNoun4 frau frau frauen frauen ;
mkN2 : (x1,x2 : Str) -> Gender -> Noun = \frau,frauen ->
mkN4 frau frau frauen frauen ;
-- Adjectives need four forms: two for the positive and one for the other degrees.
Adjective : Type = {s : Degree => AForm => Str} ;
mkAdjective : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
mkA : (x1,_,_,x4 : Str) -> Adjective = \gut,gute,besser,best ->
{s = table {
Posit => adjForms gut gute ;
Compar => adjForms besser besser ;
@@ -65,8 +65,8 @@ resource ResGer = ParamGer ** open Prelude in {
}
} ;
regAdjective : Str -> Adjective = \blau ->
mkAdjective blau blau (blau + "er") (blau + "est") ;
regA : Str -> Adjective = \blau ->
mkA blau blau (blau + "er") (blau + "est") ;
-- This auxiliary gives the forms in each degree.
@@ -89,9 +89,21 @@ resource ResGer = ParamGer ** open Prelude in {
AMod Weak GPl c => teur+"en"
} ;
-- This is used e.g. when forming determiners.
appAdj : Adjective -> Number => Gender => Case => Str = \adj ->
let
ad : GenNum -> Case -> Str = \gn,c ->
adj.s ! Posit ! AMod Strong gn c
in
\\n,g,c => case n of {
Sg => ad (GSg g) c ;
_ => ad GPl c
} ;
Verb : Type = {s : VForm => Str} ;
mkVerb : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben ->
mkV : (x1,_,_,_,_,x6 : Str) -> Verb = \geben,gibt,gib,gab,gaebe,gegeben ->
let
ifSibilant : Str -> Str -> Str -> Str = \u,b1,b2 ->
case u of {
@@ -109,7 +121,7 @@ resource ResGer = ParamGer ** open Prelude in {
gebt = addE geb + "t" ;
gebte = ifTok Tok (Predef.dp 1 gab) "e" gab (gab + "e") ;
gibst = ifSibilant (Predef.dp 1 gib) (gib + "t") (gib + "st") ;
gegebener = (regAdjective gegeben).s ! Posit ;
gegebener = (regA gegeben).s ! Posit ;
gabe = addE gab ;
gibe = ifTok Str (Predef.dp 2 gib) "ig" "e" [] ++ addE gib
in {s = table {
@@ -126,7 +138,7 @@ resource ResGer = ParamGer ** open Prelude in {
VPresSubj Sg P3 => geb + "e" ;
VPresSubj Pl P2 => geb + "et" ;
VPresSubj Pl _ => geben ;
VPresPart a => (regAdjective (geben + "d")).s ! Posit ! a ;
VPresPart a => (regA (geben + "d")).s ! Posit ! a ;
VImpfInd Sg P1 => gab ;
VImpfInd Sg P2 => gabe + "st" ;
@@ -146,7 +158,7 @@ resource ResGer = ParamGer ** open Prelude in {
-- Weak verbs, including "lächeln", "kümmern".
regVerb : Str -> Verb = \legen ->
regV : Str -> Verb = \legen ->
let
leg = case Predef.dp 2 legen of {
"en" => Predef.tk 2 legen ;
@@ -155,7 +167,16 @@ resource ResGer = ParamGer ** open Prelude in {
lege = addE leg ;
legte = lege + "te"
in
mkVerb legen (lege+"t") leg legte legte ("ge"+lege+"t") ;
mkV legen (lege+"t") leg legte legte ("ge"+lege+"t") ;
-- To eliminate the morpheme "ge".
no_geV : Verb -> Verb = \verb -> {
s = table {
VPastPart a => Predef.drop 2 (verb.s ! VPastPart a) ;
v => verb.s ! v
}
} ;
-- This function decides whether to add an "e" to the stem before "t".
-- Examples: "töten - tötet", "kehren - kehrt", "lernen - lernt", "atmen - atmet".
@@ -175,6 +196,10 @@ resource ResGer = ParamGer ** open Prelude in {
in
stem + e ;
-- Prepositions for complements indicate the complement case.
Preposition : Type = {s : Str ; c : Case} ;
--
-- mkIP : (i,me,my : Str) -> Number -> {s : Case => Str ; n : Number} =
-- \i,me,my,n -> let who = mkNP i me my n P3 in {s = who.s ; n = n} ;