Merge pull request #307 from inariksit/japanese

Japanese
This commit is contained in:
Inari Listenmaa
2020-03-31 15:24:57 +02:00
committed by GitHub

View File

@@ -23,40 +23,40 @@ param
oper oper
NP : Type = {s : Style => Str ; prepositive : Style => Str ; needPart : Bool ; NP : Type = {s : Style => Str ; prepositive : Style => Str ; needPart : Bool ;
changePolar : Bool ; meaning : Speaker ; anim : Animateness} ; changePolar : Bool ; meaning : Speaker ; anim : Animateness} ;
VP : Type = {verb : Speaker => Animateness => Style => TTense => Polarity => Str ; VP : Type = {verb : Speaker => Animateness => Style => TTense => Polarity => Str ;
a_stem, i_stem : Speaker => Animateness => Style => Str ; a_stem, i_stem : Speaker => Animateness => Style => Str ;
te, ba : Speaker => Animateness => Style => Polarity => Str ; te, ba : Speaker => Animateness => Style => Polarity => Str ;
prep : Str ; obj : Style => Str ; prepositive : Style => Str ; prep : Str ; obj : Style => Str ; prepositive : Style => Str ;
needSubject : Bool} ; needSubject : Bool} ;
Noun : Type = {s : Number => Style => Str ; anim : Animateness ; Noun : Type = {s : Number => Style => Str ; anim : Animateness ;
counter : Str ; counterReplace : Bool ; counterTsu : Bool} ; counter : Str ; counterReplace : Bool ; counterTsu : Bool} ;
PropNoun : Type = {s : Style => Str ; anim : Animateness} ; PropNoun : Type = {s : Style => Str ; anim : Animateness} ;
Adj : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging : Str ; Adj : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging : Str ;
te, ba, adv : Polarity => Str} ; te, ba, adv : Polarity => Str} ;
Adj2 : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging, Adj2 : Type = {pred : Style => TTense => Polarity => Str ; attr, dropNaEnging,
prep : Str ; te, ba, adv : Polarity => Str} ; prep : Str ; te, ba, adv : Polarity => Str} ;
Adverb : Type = {s : Style => Str ; prepositive : Bool} ; Adverb : Type = {s : Style => Str ; prepositive : Bool} ;
Pronoun : Type = {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ; Pronoun : Type = {s : Style => Str ; Pron1Sg : Bool ; anim : Animateness} ;
Determiner : Type = {quant : Style => Str ; postpositive : Str ; num : Str ; n : Number ; Determiner : Type = {quant : Style => Str ; postpositive : Str ; num : Str ; n : Number ;
inclCard : Bool ; sp : Style => Str ; no : Bool ; tenPlus : Bool} ; inclCard : Bool ; sp : Style => Str ; no : Bool ; tenPlus : Bool} ;
Num : Type = {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool ; Num : Type = {s : Str ; postpositive : Str ; n : Number ; inclCard : Bool ;
tenPlus : Bool} ; tenPlus : Bool} ;
Preposition : Type = {s : Str ; null : Str} ; Preposition : Type = {s : Str ; null : Str} ;
Verb : Type = {s : Style => TTense => Polarity => Str ; a_stem, i_stem : Str ; Verb : Type = {s : Style => TTense => Polarity => Str ; a_stem, i_stem : Str ;
te, ba : Polarity => Str ; needSubject : Bool} ; te, ba : Polarity => Str ; needSubject : Bool} ;
Verb2 : Type = {s, pass : Style => TTense => Polarity => Str ; a_stem, i_stem, pass_a_stem, Verb2 : Type = {s, pass : Style => TTense => Polarity => Str ; a_stem, i_stem, pass_a_stem,
pass_i_stem, prep : Str ; te, ba, pass_te, pass_ba : Polarity => Str} ; pass_i_stem, prep : Str ; te, ba, pass_te, pass_ba : Polarity => Str} ;
Verb3 : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem : Verb3 : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem :
Speaker => Str ; te, ba : Speaker => Polarity => Str ; prep1, prep2 : Str} ; Speaker => Str ; te, ba : Speaker => Polarity => Str ; prep1, prep2 : Str} ;
VV : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem : VV : Type = {s : Speaker => Style => TTense => Polarity => Str ; a_stem, i_stem :
Speaker => Str ; te, ba : Speaker => Polarity => Str ; sense : ModSense} ; Speaker => Str ; te, ba : Speaker => Polarity => Str ; sense : ModSense} ;
Conjunction : Type = {s : Str ; null : Str ; type : ConjType} ; Conjunction : Type = {s : Str ; null : Str ; type : ConjType} ;
Subjunction : Type = {s : Str ; type : SubjType} ; Subjunction : Type = {s : Str ; type : SubjType} ;
mkNoun : Str -> Str -> Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun = mkNoun : Str -> Str -> Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun =
\man1,man2,man3,man4,a,c,b1,b2 -> { \man1,man2,man3,man4,a,c,b1,b2 -> {
s = table { s = table {
Sg => table { Sg => table {
@@ -73,24 +73,24 @@ oper
counterReplace = b1 ; counterReplace = b1 ;
counterTsu = b2 counterTsu = b2
} ; } ;
regNoun : Str -> Animateness -> Str -> Bool -> Bool -> Noun = \s,a,c,b1,b2 -> regNoun : Str -> Animateness -> Str -> Bool -> Bool -> Noun = \s,a,c,b1,b2 ->
mkNoun s s s s a c b1 b2 ; mkNoun s s s s a c b1 b2 ;
styleNoun : Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun = \kane,okane,a,c,b1,b2 -> styleNoun : Str -> Str -> Animateness -> Str -> Bool -> Bool -> Noun = \kane,okane,a,c,b1,b2 ->
mkNoun kane okane kane okane a c b1 b2 ; mkNoun kane okane kane okane a c b1 b2 ;
numberNoun : Str -> Animateness -> Str -> Bool -> Str -> Bool -> Noun = \n,a,c,b1,pl,b2 -> numberNoun : Str -> Animateness -> Str -> Bool -> Str -> Bool -> Noun = \n,a,c,b1,pl,b2 ->
mkNoun n n pl pl a c b1 b2 ; mkNoun n n pl pl a c b1 b2 ;
regAdj : Str -> Adj = \a -> case a of { regAdj : Str -> Adj = \a -> case a of {
chiisa + "い" => i_mkAdj a ; chiisa + "い" => i_mkAdj a ;
_ => na_mkAdj a -- ooki + ("な"|"の") => na_mkAdj a _ => na_mkAdj a -- ooki + ("な"|"の") => na_mkAdj a
} ; } ;
i_mkAdj : Str -> Adj = \chiisai -> i_mkAdj : Str -> Adj = \chiisai ->
let let
chiisa = init chiisai ; chiisa = init chiisai ;
in { in {
pred = table { pred = table {
Resp => table { Resp => table {
@@ -110,43 +110,43 @@ oper
} ; } ;
TPast => table { TPast => table {
Pos => chiisa + "かった" ; Pos => chiisa + "かった" ;
Neg => chiisa + "くなかった" Neg => chiisa + "くなかった"
} }
} }
} ; } ;
attr = chiisai ; attr = chiisai ;
te = table { te = table {
Pos => chiisa + "くて" ; Pos => chiisa + "くて" ;
Neg => chiisa + "くなくて" Neg => chiisa + "くなくて"
} ; } ;
ba = table { ba = table {
Pos => chiisa + "ければ" ; Pos => chiisa + "ければ" ;
Neg => chiisa + "くなければ" Neg => chiisa + "くなければ"
} ; } ;
adv = table { adv = table {
Pos => chiisa + "く" ; Pos => chiisa + "く" ;
Neg => chiisa + "くなく" Neg => chiisa + "くなく"
} ; } ;
dropNaEnging = chiisai dropNaEnging = chiisai
} ; } ;
na_mkAdj : Str -> Adj = \ookina -> na_mkAdj : Str -> Adj = \ookina ->
let let
ooki = init ookina ooki = init ookina
in { in {
pred = \\st,t,p => ooki ++ mkCopula.s ! st ! t ! p ; pred = \\st,t,p => ooki ++ mkCopula.s ! st ! t ! p ;
attr = ookina ; attr = ookina ;
te = table { te = table {
Pos => ooki + "で" ; Pos => ooki + "で" ;
Neg => ooki + "ではなくて" Neg => ooki + "ではなくて"
} ; } ;
ba = \\p => ooki ++ mkCopula.ba ! p ; ba = \\p => ooki ++ mkCopula.ba ! p ;
adv = table { adv = table {
Pos => ooki + "に" ; Pos => ooki + "に" ;
Neg => ooki + "ではなく" Neg => ooki + "ではなく"
} ; } ;
dropNaEnging = ooki dropNaEnging = ooki
} ; } ;
-- Added by IL 2017-07. Used in NounJpn and SymbolJpn. -- Added by IL 2017-07. Used in NounJpn and SymbolJpn.
mkOrd : SS -> Adj = \symb -> { mkOrd : SS -> Adj = \symb -> {
@@ -158,23 +158,23 @@ oper
dropNaEnging = symb.s ++ "番目の" dropNaEnging = symb.s ++ "番目の"
} ; } ;
VerbalA : Str -> Str -> Adj = \kekkonshiteiru,kikonno -> VerbalA : Str -> Str -> Adj = \kekkonshiteiru,kikonno ->
let let
kekkonshite = Predef.tk 2 kekkonshiteiru kekkonshite = Predef.tk 2 kekkonshiteiru
in { in {
pred = \\st,t,p => kekkonshite ++ mkExistV.verb ! SomeoneElse ! Anim ! st ! t ! p ; pred = \\st,t,p => kekkonshite + mkExistV.verb ! SomeoneElse ! Anim ! st ! t ! p ;
attr = kikonno ; attr = kikonno ;
te = \\p => kekkonshite ++ mkExistV.te ! SomeoneElse ! Anim ! Resp ! p ; te = \\p => kekkonshite ++ mkExistV.te ! SomeoneElse ! Anim ! Resp ! p ;
ba = \\p => kekkonshite ++ mkExistV.ba ! SomeoneElse ! Anim ! Resp ! p ; ba = \\p => kekkonshite ++ mkExistV.ba ! SomeoneElse ! Anim ! Resp ! p ;
adv = table { adv = table {
Pos => init kikonno + "で" ; Pos => init kikonno + "で" ;
Neg => init kikonno + "ではなく" Neg => init kikonno + "ではなく"
} ; } ;
dropNaEnging = init kikonno dropNaEnging = init kikonno
} ; } ;
mkVerb : Str -> VerbGroup -> Verb = mkVerb : Str -> VerbGroup -> Verb =
\yomu,gr -> \yomu,gr ->
let let
yoma = mk_a_stem yomu gr ; yoma = mk_a_stem yomu gr ;
yomi = mk_i_stem yomu gr ; yomi = mk_i_stem yomu gr ;
@@ -207,7 +207,7 @@ oper
yon + "だ" => yon + "で" ; yon + "だ" => yon + "で" ;
yon + "た" => yon + "て" yon + "た" => yon + "て"
} ; } ;
Neg => yoma + "ないで" Neg => yoma + "ないで"
} ; } ;
a_stem = yoma ; a_stem = yoma ;
i_stem = yomi ; i_stem = yomi ;
@@ -217,9 +217,9 @@ oper
} ; } ;
needSubject = True needSubject = True
} ; } ;
mkVerb2 : Str -> Str -> VerbGroup -> Verb2 = mkVerb2 : Str -> Str -> VerbGroup -> Verb2 =
\yomu,p,gr -> \yomu,p,gr ->
let let
yoma = mk_a_stem yomu gr ; yoma = mk_a_stem yomu gr ;
in { in {
@@ -256,7 +256,7 @@ oper
Gr1 => yoma + "れませんでした" ; Gr1 => yoma + "れませんでした" ;
Gr2 => yoma + "られませんでした" ; Gr2 => yoma + "られませんでした" ;
Suru => Predef.tk 2 yomu + "されませんでした" ; Suru => Predef.tk 2 yomu + "されませんでした" ;
Kuru => "来られませんでした" Kuru => "来られませんでした"
} }
} }
} ; } ;
@@ -303,7 +303,7 @@ oper
Gr2 => yoma + "られないで" ; Gr2 => yoma + "られないで" ;
Suru => Predef.tk 2 yomu + "されないで" ; Suru => Predef.tk 2 yomu + "されないで" ;
Kuru => "来られないで" Kuru => "来られないで"
} }
} ; } ;
pass_a_stem = case gr of { pass_a_stem = case gr of {
Gr1 => yoma + "れ" ; Gr1 => yoma + "れ" ;
@@ -329,12 +329,12 @@ oper
Gr2 => yoma + "られなければ" ; Gr2 => yoma + "られなければ" ;
Suru => Predef.tk 2 yomu + "されなければ" ; Suru => Predef.tk 2 yomu + "されなければ" ;
Kuru => "来られなければ" Kuru => "来られなければ"
} }
} ; } ;
needSubject = True needSubject = True
} ; } ;
mkVerb3 : Str -> Str -> Str -> VerbGroup -> Verb3 = mkVerb3 : Str -> Str -> Str -> VerbGroup -> Verb3 =
\uru,p1,p2,gr -> { \uru,p1,p2,gr -> {
s = \\sp => (mkVerb uru gr).s ; s = \\sp => (mkVerb uru gr).s ;
te = \\sp => (mkVerb uru gr).te ; te = \\sp => (mkVerb uru gr).te ;
@@ -344,13 +344,13 @@ oper
prep1 = p1 ; prep1 = p1 ;
prep2 = p2 prep2 = p2
} ; } ;
mkCopula : Verb = { mkCopula : Verb = {
s = table { s = table {
Resp => table { Resp => table {
(TPres|TFut) => table { (TPres|TFut) => table {
Pos => "です" ; Pos => "です" ;
Neg => "ではありません" Neg => "ではありません"
} ; } ;
TPast => table { TPast => table {
Pos => "でした" ; Pos => "でした" ;
@@ -367,7 +367,7 @@ oper
Neg => "ではなかった" Neg => "ではなかった"
} }
} }
} ; } ;
te = table { te = table {
Pos => "だって" ; Pos => "だって" ;
Neg => "ではなくて" Neg => "ではなくて"
@@ -379,11 +379,11 @@ oper
a_stem, i_stem = "で" ; -- not used a_stem, i_stem = "で" ; -- not used
needSubject = True -- not used needSubject = True -- not used
} ; } ;
mkExistV : VP = { mkExistV : VP = {
verb = \\sp => table { verb = \\sp => table {
Anim => \\st,t,p => (mkVerb "いる" Gr2).s ! st ! t ! p ; Anim => \\st,t,p => (mkVerb "いる" Gr2).s ! st ! t ! p ;
Inanim => table { Inanim => table {
Resp => table { Resp => table {
(TPres|TFut) => table { (TPres|TFut) => table {
Pos => "あります" ; Pos => "あります" ;
@@ -404,7 +404,7 @@ oper
Neg => "なかった" Neg => "なかった"
} }
} }
} }
} ; } ;
te = \\sp => table { te = \\sp => table {
Anim => \\st => table { Anim => \\st => table {
@@ -438,11 +438,11 @@ oper
prepositive, obj = \\st => [] ; prepositive, obj = \\st => [] ;
needSubject = True needSubject = True
} ; } ;
mkWant : VV = { mkWant : VV = {
s = table { s = table {
Me => \\st,t,p => (i_mkAdj "たい").pred ! st ! t ! p ; Me => \\st,t,p => (i_mkAdj "たい").pred ! st ! t ! p ;
SomeoneElse => \\st,t,p => "たがって" ++ (mkVerb "いる" Gr2).s ! st ! t ! p SomeoneElse => \\st,t,p => "たがって" ++ (mkVerb "いる" Gr2).s ! st ! t ! p
} ; } ;
te = table { te = table {
Me => table { Me => table {
@@ -456,7 +456,7 @@ oper
} ; } ;
a_stem = table { a_stem = table {
Me => "たいで" ; Me => "たいで" ;
SomeoneElse => "たがってい" SomeoneElse => "たがってい"
} ; } ;
i_stem = table { i_stem = table {
Me => "たいで" ; Me => "たいで" ;
@@ -474,21 +474,21 @@ oper
} ; } ;
sense = Wish sense = Wish
} ; } ;
mkCan : VV = { mkCan : VV = {
s = \\sp,st,t,p => (mkVerb "できる" Gr2).s ! st ! t ! p ; s = \\sp,st,t,p => (mkVerb "できる" Gr2).s ! st ! t ! p ;
te = \\sp => table { te = \\sp => table {
Pos => "できて" ; Pos => "できて" ;
Neg => "できないで" Neg => "できないで"
} ; } ;
a_stem, i_stem = \\sp => "でき" ; a_stem, i_stem = \\sp => "でき" ;
ba = \\sp => table { ba = \\sp => table {
Pos => "できれば" ; Pos => "できれば" ;
Neg => "できなければ" Neg => "できなければ"
} ; } ;
sense = Abil sense = Abil
} ; } ;
mkMust : VV = { mkMust : VV = {
s = \\sp,st,t,p => (mkVerb "なる" Gr1).s ! st ! t ! Neg ; s = \\sp,st,t,p => (mkVerb "なる" Gr1).s ! st ! t ! Neg ;
te = \\sp,p => "ならなくて" ; te = \\sp,p => "ならなくて" ;
@@ -505,7 +505,7 @@ oper
i_stem = \\sp => (mkVerb yomu gr).i_stem ; i_stem = \\sp => (mkVerb yomu gr).i_stem ;
ba = \\sp => (mkVerb yomu gr).ba ; ba = \\sp => (mkVerb yomu gr).ba ;
sense = Abil sense = Abil
} ; } ;
mkGive : Verb3 = { mkGive : Verb3 = {
s = table { s = table {
@@ -518,19 +518,19 @@ oper
} ; } ;
a_stem, i_stem = table { a_stem, i_stem = table {
Me => "呉れ" ; Me => "呉れ" ;
SomeoneElse => "上げ" SomeoneElse => "上げ"
} ; } ;
ba = table { ba = table {
Me => (mkVerb "呉れる" Gr2).ba ; Me => (mkVerb "呉れる" Gr2).ba ;
SomeoneElse => (mkVerb "上げる" Gr2).ba SomeoneElse => (mkVerb "上げる" Gr2).ba
} ; } ;
prep1 = "に" ; prep1 = "に" ;
prep2 = "を" prep2 = "を"
} ; } ;
mkGo : Verb = { mkGo : Verb = {
s = table { s = table {
Resp => (mkVerb "行く" Gr1).s ! Resp ; Resp => (mkVerb "行く" Gr1).s ! Resp ;
Plain => table { Plain => table {
(TPres|TFut) => (mkVerb "行く" Gr1).s ! Plain ! TPres ; (TPres|TFut) => (mkVerb "行く" Gr1).s ! Plain ! TPres ;
TPast => table { TPast => table {
@@ -541,7 +541,7 @@ oper
} ; } ;
te = table { te = table {
Pos => "行って" ; Pos => "行って" ;
Neg => "行かないで" Neg => "行かないで"
} ; } ;
a_stem = "行か" ; a_stem = "行か" ;
i_stem = "行き" ; i_stem = "行き" ;
@@ -556,13 +556,13 @@ oper
inclCard = False ; inclCard = False ;
tenPlus = False tenPlus = False
} ; } ;
regPron : Str -> Bool -> Animateness -> Pronoun = \kare,b,a -> { regPron : Str -> Bool -> Animateness -> Pronoun = \kare,b,a -> {
s = \\st => kare ; s = \\st => kare ;
Pron1Sg = b ; Pron1Sg = b ;
anim = a anim = a
} ; } ;
mkDet : Str -> Str -> Number -> Determiner = \q,sp,n -> { mkDet : Str -> Str -> Number -> Determiner = \q,sp,n -> {
quant = \\st => q ; quant = \\st => q ;
postpositive = [] ; postpositive = [] ;
@@ -573,7 +573,7 @@ oper
no = False ; no = False ;
tenPlus = False tenPlus = False
} ; } ;
stylePron : Str -> Str -> Bool -> Animateness -> Pronoun = \boku,watashi,b,a -> { stylePron : Str -> Str -> Bool -> Animateness -> Pronoun = \boku,watashi,b,a -> {
s = table { s = table {
Plain => boku ; Plain => boku ;
@@ -581,8 +581,8 @@ oper
} ; } ;
Pron1Sg = b ; Pron1Sg = b ;
anim = a anim = a
} ; } ;
regPN : Str -> PropNoun = \paris -> { regPN : Str -> PropNoun = \paris -> {
s = table { s = table {
Plain => paris ; Plain => paris ;
@@ -590,7 +590,7 @@ oper
} ; } ;
anim = Inanim anim = Inanim
} ; } ;
personPN : Str -> Str -> PropNoun = \jon,jonsan -> { personPN : Str -> Str -> PropNoun = \jon,jonsan -> {
s = table { s = table {
Plain => jon ; Plain => jon ;
@@ -598,27 +598,27 @@ oper
} ; } ;
anim = Anim anim = Anim
} ; } ;
mkAdv : Str -> Adverb = \adv -> { mkAdv : Str -> Adverb = \adv -> {
s = \\st => adv ; s = \\st => adv ;
prepositive = False prepositive = False
} ; } ;
mkNP : Str -> Bool -> Bool -> Animateness -> NP = \np,b1,b2,a -> { mkNP : Str -> Bool -> Bool -> Animateness -> NP = \np,b1,b2,a -> {
s = \\st => np ; s = \\st => np ;
prepositive = \\st => [] ; prepositive = \\st => [] ;
needPart = b1 ; needPart = b1 ;
changePolar = b2 ; changePolar = b2 ;
meaning = SomeoneElse ; meaning = SomeoneElse ;
anim = a anim = a
} ; } ;
mkConj : Str -> ConjType -> Conjunction = \c,t -> { mkConj : Str -> ConjType -> Conjunction = \c,t -> {
s = c ; s = c ;
null = "" ; null = "" ;
type = t type = t
} ; } ;
mkPrep : Str -> Preposition = \p -> { mkPrep : Str -> Preposition = \p -> {
s = p ; s = p ;
null = "" ; null = "" ;
@@ -692,10 +692,10 @@ oper
"つ" => init neru + "てば" ; "つ" => init neru + "てば" ;
_ => init neru + "えば" _ => init neru + "えば"
} ; } ;
mkFirst : Adj = { mkFirst : Adj = {
pred = \\st,t,p => "一番目" ++ mkCopula.s ! st ! t ! p ; pred = \\st,t,p => "一番目" ++ mkCopula.s ! st ! t ! p ;
attr = "一番目の" ; attr = "一番目の" ;
te = \\p => "一番目" ++ mkCopula.te ! p ; te = \\p => "一番目" ++ mkCopula.te ! p ;
ba = \\p => "一番目" ++ mkCopula.ba ! p ; ba = \\p => "一番目" ++ mkCopula.ba ! p ;
adv = table { adv = table {
@@ -704,12 +704,12 @@ oper
} ; } ;
dropNaEnging = "一番目" dropNaEnging = "一番目"
} ; } ;
mkRain : Verb = { mkRain : Verb = {
s = \\st,t,p => "雨が" ++ (mkVerb "降っている" Gr2).s ! st ! t ! p ; -- "ame ga furu" s = \\st,t,p => "雨が" ++ (mkVerb "降っている" Gr2).s ! st ! t ! p ; -- "ame ga furu"
te = table { te = table {
Pos => "雨が降っていて" ; Pos => "雨が降っていて" ;
Neg => "雨が降っていないで" Neg => "雨が降っていないで"
} ; } ;
a_stem = "雨が降ってい" ; a_stem = "雨が降ってい" ;
i_stem = "雨が降ってい" ; i_stem = "雨が降ってい" ;
@@ -720,4 +720,3 @@ oper
needSubject = False needSubject = False
} ; } ;
} }