parametrizad Scandinavian and added Danish

This commit is contained in:
aarne
2005-01-19 16:40:49 +00:00
parent 027539d4e2
commit 4e004d4097
19 changed files with 2323 additions and 1618 deletions

View File

@@ -0,0 +1,4 @@
--# -path=.:../scandinavian:../abstract:../../prelude
concrete CategoriesDan of Categories =
CategoriesScand with (SyntaxScand=SyntaxDan) ;

View File

@@ -0,0 +1,228 @@
--1 A Simple Danish Resource Morphology
--
-- Aarne Ranta 2002
--
-- This resource morphology contains definitions needed in the resource
-- syntax. It moreover contains copies of the most usual inflectional patterns
-- as defined in functional morphology (in the Haskell file $RulesSw.hs$).
--
-- We use the parameter types and word classes defined for morphology.
resource MorphoDan = open Prelude, TypesDan in {
-- Danish grammar source: http://users.cybercity.dk/~nmb3879/danish.html
-- nouns
oper
mkSubstantive : (_,_,_,_ : Str) -> {s : SubstForm => Str} =
\dreng, drengen, drenge, drengene -> {s = table {
SF Sg Indef c => mkCase dreng ! c ;
SF Sg Def c => mkCase drengen ! c ;
SF Pl Indef c => mkCase drenge ! c ;
SF Pl Def c => mkCase drengene ! c
}
} ;
mkCase : Str -> Case => Str = \bil -> table {
Nom => bil ;
Gen => bil + "s" --- but: hus --> hus
} ;
nDreng : Str -> Subst = \dreng ->
mkSubstantive dreng (dreng + "en") (dreng + "e") (dreng + "ene") **
{h1 = Utr} ;
nBil : Str -> Subst = \bil ->
mkSubstantive bil (bil + "en") (bil + "er") (bil + "erne") **
{h1 = Utr} ;
nUge : Str -> Subst = \uge ->
mkSubstantive uge (uge + "n") (uge + "r") (uge + "rne") **
{h1 = Utr} ;
nHus : Str -> Subst = \hus ->
mkSubstantive hus (hus + "et") hus (hus + "ene") **
{h1 = Neutr} ;
-- adjectives
mkAdjective : (_,_,_,_,_ : Str) -> Adj =
\stor,stort,store,storre,storst -> {s = table {
AF (Posit (Strong (ASg Utr))) c => mkCase stor ! c ;
AF (Posit (Strong (ASg Neutr))) c => mkCase stort ! c ;
AF (Posit _) c => mkCase store ! c ;
AF Compar c => mkCase storre ! c ;
AF (Super SupStrong) c => mkCase storst ! c ;
AF (Super SupWeak) c => mkCase (storst + "e") ! c
}
} ;
aRod : Str -> Adj = \rod ->
mkAdjective rod (rod + "t") (rod + "e") (rod + "ere") (rod + "est") ;
aAbstrakt : Str -> Adj = \abstrakt ->
mkAdjective abstrakt abstrakt (abstrakt + "e") (abstrakt + "ere") (abstrakt + "est") ;
aRask : Str -> Adj = \rask ->
mkAdjective rask rask (rask + "e") (rask + "ere") (rask + "est") ;
-- verbs
mkVerb : (_,_,_,_,_,_ : Str) -> Verbum =
\spise,spiser,spises,spiste,spist,spis -> {s = table {
VI (Inf v) => mkVoice v spise ;
VF (Pres m Act) => spiser ;
VF (Pres m Pass) => spises ;
VF (Pret m v) => mkVoice v spiste ;
VI (Supin v) => mkVoice v spist ;
VI (PtPret c) => mkCase spist ! c ;
VF Imper => spis
}
} ;
mkVoice : Voice -> Str -> Str = \v,s -> case v of {
Act => s ;
Pass => s + "s"
} ;
vHusk : Str -> Verbum = \husk ->
mkVerb (husk + "e") (husk + "er") (husk + "es") (husk + "ede") (husk + "et") husk ;
vSpis : Str -> Verbum = \spis ->
mkVerb (spis + "e") (spis + "er") (spis + "es") (spis + "te") (spis + "t") spis ;
vBo : Str -> Verbum = \bo ->
mkVerb bo (bo + "r") (bo + "es") (bo + "ede") (bo + "et") bo ;
-- pronouns
oper jag_32 : ProPN =
{s = table {
PNom => "jeg" ;
PAcc => "mig" ;
PGen (ASg Utr) => "min" ;
PGen (ASg Neutr) => "mit" ;
PGen APl => "mine"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P1
} ;
oper du_33 : ProPN =
{s = table {
PNom => "du" ;
PAcc => "dig" ;
PGen (ASg Utr) => "din" ;
PGen (ASg Neutr) => "dit" ;
PGen APl => "dine"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P2
} ;
oper han_34 : ProPN =
{s = table {
PNom => "han" ;
PAcc => "ham" ;
PGen (ASg Utr) => "hans" ;
PGen (ASg Neutr) => "hans" ;
PGen APl => "hans"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P3
} ;
oper hon_35 : ProPN =
{s = table {
PNom => "hun" ;
PAcc => "hende" ;
PGen (ASg Utr) => "hendes" ;
PGen (ASg Neutr) => "hendes" ;
PGen APl => "hendes"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P3
} ;
oper vi_36 : ProPN =
{s = table {
PNom => "vi" ;
PAcc => "os" ;
PGen _ => "vores"
} ;
h1 = Utr ;
h2 = Pl ;
h3 = P1
} ;
oper ni_37 : ProPN =
{s = table {
PNom => "i" ;
PAcc => "jer" ;
PGen _ => "jeres"
} ;
h1 = Utr ;
h2 = Pl ;
h3 = P2
} ;
oper de_38 : ProPN =
{s = table {
PNom => "de" ;
PAcc => "dem" ;
PGen _ => "deres"
} ;
h1 = Utr ;
h2 = Pl ;
h3 = P3
} ;
oper De_38 : ProPN =
{s = table {
PNom => "De" ;
PAcc => "Dem" ;
PGen _ => "Deres"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P2
} ;
oper den_39 : ProPN =
{s = table {
PNom => "den" ;
PAcc => "den" ;
PGen _ => "dens"
} ;
h1 = Utr ;
h2 = Sg ;
h3 = P3
} ;
oper det_40 : ProPN =
{s = table {
PNom => "det" ;
PAcc => "det" ;
PGen _ => "dets"
} ;
h1 = Neutr ;
h2 = Sg ;
h3 = P3
} ;
-- from Numerals
param DForm = ental | ton | tiotal ;
oper mkTal : Str -> Str -> Str -> {s : DForm => Str} =
\to, tolv, tyve ->
{s = table {ental => to ; ton => tolv ; tiotal => tyve}} ;
oper regTal : Str -> {s : DForm => Str} = \fem -> mkTal fem (fem + "ton") (fem + "tio") ;
}

View File

@@ -0,0 +1,37 @@
-- AR 12/10/2002 following www.geocities.com/tsca.geo/dansk/dknummer.html
concrete NumeralsDan of Numerals = open Prelude, MorphoDan in {
lincat Numeral = {s : Str} ;
lincat Digit = {s : DForm => Str} ;
lincat Sub10 = {s : DForm => Str} ;
lincat Sub100 = {s : Str} ;
lincat Sub1000 = {s : Str} ;
lincat Sub1000000 = {s : Str} ;
lin num x = x ;
lin n2 = mkTal "to" "tolv" "tyve" ;
lin n3 = mkTal "tre" "tretten" "tredive" ;
lin n4 = mkTal "fire" "fjorten" "fyrre" ;
lin n5 = mkTal "fem" "femten" "halvtreds" ;
lin n6 = mkTal "seks" "seksten" "tres" ;
lin n7 = mkTal "syv" "sytten" "halvfjerds" ;
lin n8 = mkTal "otte" "atten" "firs" ;
lin n9 = mkTal "ni" "nitten" "halvfems" ;
lin pot01 = {s = table {f => "en"}} ; ---
lin pot0 d = {s = table {f => d.s ! f}} ;
lin pot110 = ss "ti" ;
lin pot111 = ss "elleve" ;
lin pot1to19 d = ss (d.s ! ton) ;
lin pot0as1 n = ss (n.s ! ental) ;
lin pot1 d = ss (d.s ! tiotal) ;
lin pot1plus d e = ss (e.s ! ental ++ "og" ++ d.s ! tiotal) ;
lin pot1as2 n = n ;
lin pot2 d = ss (d.s ! ental ++ "hundrede") ;
lin pot2plus d e = ss (d.s ! ental ++ "hundrede" ++ "og" ++ e.s) ;
lin pot2as3 n = n ;
lin pot3 n = ss (n.s ++ "tusind") ;
lin pot3plus n m = ss (n.s ++ "tusind" ++ "og" ++ m.s) ; ---
}

View File

@@ -0,0 +1,4 @@
--# -path=.:../scandinavian:../abstract:../../prelude
concrete RulesDan of Rules =
RulesScand with (SyntaxScand=SyntaxDan) ;

View File

@@ -0,0 +1,118 @@
--# -path=.:../scandinavian:../abstract:../../prelude
--1 The Top-Level Swedish Resource Grammar: Structural Words
--
-- Aarne Ranta 2002 -- 2004
--
concrete StructuralDan of Structural =
CategoriesDan, NumeralsDan ** open Prelude, MorphoDan, SyntaxDan in {
lin
INP = pronNounPhrase jag_32 ;
ThouNP = pronNounPhrase du_33 ;
HeNP = pronNounPhrase han_34 ;
SheNP = pronNounPhrase hon_35 ;
WeNumNP n = pronNounPhrase (pronWithNum vi_36 n) ;
YeNumNP n = pronNounPhrase (pronWithNum ni_37 n) ;
TheyNP = pronNounPhrase de_38 ;
TheyFemNP = pronNounPhrase de_38 ;
YouNP = let {ni = pronNounPhrase ni_37 } in {s = ni.s ; g = ni.g ; n = Sg} ;
ItNP = pronNounPhrase det_40 ; ----
ThisNP = regNameNounPhrase ["det her"] NNeutr ;
ThatNP = regNameNounPhrase ["det der"] NNeutr ;
TheseNumNP n =
{s = \\c => ["de her"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
ThoseNumNP n =
{s = \\c => ["de der"] ++ n.s ! npCase c ; g = Neutr ; n = Pl} ;
EveryDet = varjeDet ;
AllMassDet = mkDeterminerSgGender2 "all" "alt" IndefP ;
AllNumDet = mkDeterminerPlNum "alle" IndefP ;
AnyDet = mkDeterminerSgGender2 "nogen" "noget" IndefP ;
AnyNumDet = mkDeterminerPlNum "nogle" IndefP ;
SomeDet = mkDeterminerSgGender2 "nogen" "noget" IndefP ;
SomeNumDet = mkDeterminerPlNum "nogle" IndefP ;
ManyDet = mkDeterminerPl "mange" IndefP ;
HowManyDet = mkDeterminerPl ["hvor mange"] IndefP ;
NoDet = mkDeterminerSgGender2 "ingen" "ingen" IndefP ;
NoNumDet = mkDeterminerPlNum "ingen" IndefP ;
WhichNumDet = mkDeterminerPlNum "hvilke" IndefP ;
UseNumeral i = {s = table {Nom => i.s ; Gen => i.s ++ "s"}} ; ---
WhichDet = vilkenDet ;
MostDet = mkDeterminerSgGender2 ["den meste"] ["det meste"] (DefP Def) ;
MostsDet = flestaDet ;
MuchDet = mkDeterminerSg (detSgInvar "meget") IndefP ;
ThisDet = mkDeterminerSgGender2 ["den her"] ["det her"] (DefP Def) ;
ThatDet = mkDeterminerSgGender2 ["den der"] ["det der"] (DefP Def) ;
TheseNumDet = mkDeterminerPlNum ["de her"] (DefP Def) ;
ThoseNumDet = mkDeterminerPlNum ["de der"] (DefP Def) ;
HowIAdv = ss "hvor" ;
WhenIAdv = ss "hvornår" ;
WhereIAdv = ss "hver" ;
WhyIAdv = ss "hvorfor" ;
AndConj = ss "og" ** {n = Pl} ;
OrConj = ss "eller" ** {n = Sg} ;
BothAnd = sd2 "både" "og" ** {n = Pl} ;
EitherOr = sd2 "enten" "eller" ** {n = Sg} ;
NeitherNor = sd2 "hverken" "eller" ** {n = Sg} ;
IfSubj = ss "hvis" ;
WhenSubj = ss "når" ;
PhrYes = ss ["Ja ."] ;
PhrNo = ss ["Nej ."] ;
VeryAdv = ss "meget" ;
TooAdv = ss "for" ; ---- ?
OtherwiseAdv = ss "anderledes" ; ---- ?
ThereforeAdv = ss "derfor" ;
EverybodyNP = let alla = table {Nom => "alle" ; Gen => "alles"} in
{s = \\c => alla ! npCase c ; g = Utr ; n = Pl} ;
SomebodyNP = nameNounPhrase (mkProperName "nogen" NUtr) ;
NobodyNP = nameNounPhrase (mkProperName "ingen" NUtr) ;
EverythingNP = nameNounPhrase (mkProperName "alt" NNeutr) ;
SomethingNP = nameNounPhrase (mkProperName "noget" NNeutr) ;
NothingNP = nameNounPhrase (mkProperName "intet" NNeutr) ;
CanVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ;
CanKnowVV = mkVerb "kunne" "kan" nonExist "kunne" "kunnet" nonExist ** {s1 = [] ; isAux = True} ;
MustVV = mkVerb "måtte" "må" "mås" "måtte" "måttet" "må" ** {s1 = [] ; isAux = True} ; ---- ?
WantVV = mkVerb "ville" "vil" nonExist "ville" "villet" nonExist ** {s1 = [] ; isAux = True} ; ---
EverywhereNP = advPost "overalt" ;
SomewhereNP = advPost ["et eller andet sted"] ; ---- ?
NowhereNP = advPost "intetsteds" ;
AlthoughSubj = ss ["selv om"] ;
AlmostAdv = ss "næsten" ;
QuiteAdv = ss "temmelig" ;
InPrep = ss "i" ;
OnPrep = ss "på" ;
ToPrep = ss "til" ;
ThroughPrep = ss "igennem" ;
AbovePrep = ss "ovenfor" ;
UnderPrep = ss "under" ;
InFrontPrep = ss "fremfor" ; ---- ?
BehindPrep = ss "bag" ;
BetweenPrep = ss "mellem" ;
FromPrep = ss "fra" ;
BeforePrep = ss "før" ;
DuringPrep = ss "under" ;
AfterPrep = ss "efter" ;
WithPrep = ss "med" ;
WithoutPrep = ss "uden" ;
ByMeansPrep = ss "med" ;
PossessPrep = ss "af" ;
PartPrep = ss "af" ;
AgentPrep = ss "af" ;
}

View File

@@ -0,0 +1,104 @@
--# -path=.:../scandinavian:../../prelude
instance SyntaxDan of SyntaxScand = TypesDan **
open Prelude, (CO = Coordination), MorphoDan in {
oper
------ mkAdjForm
-- When common nouns are extracted from lexicon, the composite noun form is ignored.
extCommonNounMasc = extCommNoun ;
npMan : NounPhrase = nameNounPhrase (mkProperName "man" NUtr) ;
npDet : NounPhrase = nameNounPhrase (mkProperName "det" NNeutr) ;
mkAdjForm : Species -> Number -> NounGender -> AdjFormPos = \b,n,g ->
case <b,n> of {
<Indef,Sg> => Strong (ASg (genNoun g)) ;
<Indef,Pl> => Strong APl ;
<Def, _> => Weak
} ;
deponentVerb : Verb -> Verb = \finna -> {
s = table {
VF (Pres m _) => finna.s ! VF (Pres m Pass) ;
VF (Pret m _) => finna.s ! VF (Pret m Pass) ;
VI (Inf _) => finna.s ! VI (Inf Pass) ;
VI (Supin _) => finna.s ! VI (Supin Pass) ;
v => finna.s ! v --- Imper !
} ;
s1 = finna.s1
} ;
verbFinnas : Verb =
deponentVerb (mkVerb "finde" "finder" "findes" "fandt" "fundet" "find" ** {s1 = []}) ;
verbVara = mkVerb "være" "er" nonExist "var" "været" "vær" ** {s1 = []} ;
verbHava = mkVerb "have" "har" "haves" "havde" "haft" "hav" ** {s1 = []} ;
relPronForms : RelCase => GenNum => Str = table {
RNom => \\_ => "som" ;
RAcc => \\_ => variants {"som" ; []} ;
RGen => \\_ => "hvis" ;
RPrep => pronVilken
} ;
pronVilken = table {
ASg Utr => "hvilken" ;
ASg Neutr => "hvilket" ;
APl => "hvilke"
} ;
pronSådan = table {
ASg Utr => "sådan" ;
ASg Neutr => "sådant" ;
APl => "sådanne"
} ;
pronNågon = table {
ASg Utr => "nogen" ;
ASg Neutr => "noget" ;
APl => "nogle"
} ;
specDefPhrase : Bool -> Species = \b ->
if_then_else Species b Indef Def ;
superlSpecies = Indef ;
artIndef = table {Utr => "en" ; Neutr => "et"} ;
artDef : Bool => GenNum => Str = table {
True => table {
ASg Utr => "den" ;
ASg Neutr => "det" ; -- det gamla huset
APl => variants {"de"}
} ;
False => table {_ => []} -- huset
} ;
auxHar = "har" ;
auxHade = "havde" ;
auxHa = "have" ;
auxSka = "skal" ;
auxSkulle = "skulle" ;
infinAtt = "at" ;
varjeDet : Determiner = mkDeterminerSg (detSgInvar "hver") IndefP ;
allaDet : Determiner = mkDeterminerPl "alle" IndefP ;
flestaDet : Determiner = mkDeterminerPl ["de fleste"] IndefP ;
prepÄn = "end" ;
negInte = "ikke" ;
conjOm = "hvis" ;
pronVars = "hvis" ;
pronVem = "hvem" ;
pronVems = "hvis" ; ---- ??
pronVad = "hvad" ;
}

View File

@@ -0,0 +1,50 @@
--# -path=.:../scandinavian:../abstract:../../prelude
concrete TestResourceDan of TestResource = RulesDan, StructuralDan ** open MorphoDan, SyntaxDan in {
flags startcat=Phr ; lexer=text ; unlexer=text ;
-- a random sample from the lexicon
lin
Big = mkAdjective "stor" "stort" "store" "større" "størst" ;
Small = mkAdjective "lille" "lille" "små" "mindre" "mindst" ;
Old = mkAdjective "gammel" "gammelt" "gamle" "ældre" "ældst" ;
Young = mkAdjective "ung" "ungt" "unge" "yngre" "yngst" ;
American = extAdjective (aRod "amerikansk") ;
Finnish = extAdjective (aRod "finsk") ;
Happy = aRod "lykkelig" ;
Married = extAdjective (aAbstrakt "gift") ** {s2 = "med"} ;
Man = extCommNoun (mkSubstantive "mand" "manden" "mænd" "mænden" ** {h1 = Utr}) ;
Bar = extCommNoun (nBil "bar") ; ---- ?
Bottle = extCommNoun (nUge "flaske") ;
Woman = extCommNoun (nUge "kvinde") ;
Car = extCommNoun (nBil "bil") ;
House = extCommNoun (nHus "hus") ;
Light = extCommNoun (nHus "lys") ;
Wine = extCommNoun (nHus "vin") ; ---- ?
Walk = mkVerb "gå" "går" "gås" "gik" "gået" "gå" ** {s1 = []} ;
Run = mkVerb "springe" "springer" "springes" "sprang" "sprunget" "spring" ** {s1 = []} ;
Drink = extTransVerb (mkVerb "drikke" "drikker" "drikkes" "drak" "drukket" "drikk" ** {s1 = []}) [] ;
Love = extTransVerb (vNopart (vHusk "ælsk")) [] ;
Send = extTransVerb (vNopart (vSpis "send")) [] ; ---- ?
Wait = extTransVerb (vNopart (vSpis "vent")) "på" ;
Give = extTransVerb (vNopart (mkVerb "give" "giver" "gives" "gav" "givet" "giv")) [] ** {s3 = "til"} ;
Prefer = extTransVerb (vNopart (vSpis "foretrækk")) [] ** {s3 = "for"} ;
Say = vNopart (mkVerb "sige" "siger" "siges" "sagde" "sagt" "sig") ;
Prove = vNopart (vSpis "bevise") ;
SwitchOn = mkDirectVerb (vHusk "lukk" ** {s1 = "op"}) ;
SwitchOff = mkDirectVerb (vHusk "slukk" ** {s1 = []}) ;
Mother = mkFun (extCommNoun (mkSubstantive "moder" "moderen" "mødre"
"mødrene" ** {h1 = Utr})) "til" ; ---- ?
Uncle = mkFun (extCommNoun (mkSubstantive "onkel" "onkelen" "onkler" "onklene" ** {h1 = Utr})) "til" ; ---- ?
Connection = mkFun (extCommNoun (nUge "forbindelse")) "fra" ** {s3 = "til"} ;
Always = advPre "altid" ;
Well = advPost "godt" ;
John = mkProperName "Johan" NUtr ;
Mary = mkProperName "Maria" NUtr ;
} ;

View File

@@ -0,0 +1,33 @@
--1 Danish Word Classes and Morphological Parameters
--
-- This is a resource module for Italian morphology, defining the
-- morphological parameters and word classes of Italian.
-- The morphology is so far only
-- complete w.r.t. the syntax part of the resource grammar.
-- It does not include those parameters that are not needed for
-- analysing individual words: such parameters are defined in syntax modules.
instance TypesDan of TypesScand = {
param
NounGender = NUtr | NNeutr ;
oper
genNoun = \s -> case s of {NUtr => Utr ; NNeutr => Neutr} ;
sexNoun _ = NoMasc ;
gen2nounGen = \s -> case s of {Utr => NUtr ; Neutr => NNeutr} ;
param
AdjFormPos = Strong GenNum | Weak ;
VFin =
Pres Mode Voice
| Pret Mode Voice
| Imper ; --- no passive
VInf =
Inf Voice
| Supin Voice
| PtPret Case ; ---- number and gender
}