mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-21 02:39:31 -06:00
German lexicon started
This commit is contained in:
@@ -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} ;
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
@@ -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$
|
||||
--
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
Reference in New Issue
Block a user