forked from GitHub/gf-rgl
Complete AdjectiveTur (#12)
* remove unnecessary flags from GrammarTur.gf
* Implement the linearization for UseA2
* Minor formatting fixes
* Manually specify the preposition "ile" for married_A2
* Implement the linearization for ComplA2
* Implement the linearization for ReflA2 ("kendi ile evli")
* Fix ReflA2 adjective case to Nom
* Add a TODO comment
* Add a linearization for AdAP
* Implement the linearization for UseA2
* Minor formatting fixes
* Manually specify the preposition "ile" for married_A2
* Implement the linearization for ComplA2
* Implement the linearization for ReflA2 ("kendi ile evli")
* Fix ReflA2 adjective case to Nom
* Add a TODO comment
* Add a linearization for AdAP
* Fix AdAP
* Add linearization for at_most_AdN
* Add linearization for at_least_AdN
* added dummies for the missing modules in Turkish
* Add the linearization for as_CAdv
* Add rudimentary linearization for UsePN
* Add the linearization for CAdvAP
* Add preliminary linearization for EmbedVP
* Add linearization stub for SentAP
* Fix code-formatting and indentation in HarmonyTur
* Patterns for front and back vowels
* Add an oper for attaching the -mA suffix
* Formatting fixes in ParadigmsTur
* Attempt to implement attachMe
* Almost-working linearization for SentAP
* Update TODO for SentAP
* Move the addition of suffix si to the linearization of EmbedVP
* Import PhraseTur in GrammarTur
* Fix the duplication of PhraseTur in GrammarTur
* Start working on PhraseTur
* Fix formatting of makeH4Table
* Formatting
* Begin implementing the gerund inflection `makeVerb`
* Attach Number and Case data to the Gerund constructor of param VForm
* Get rid of hacky appending of "si" in EmbedVP
This commit is contained in:
committed by
Krasimir Angelov
parent
432a6295cc
commit
76d6749797
@@ -1,4 +1,5 @@
|
||||
concrete AdjectiveTur of Adjective = CatTur ** open ResTur, Prelude in {
|
||||
concrete AdjectiveTur of Adjective =
|
||||
CatTur ** open ResTur, ParadigmsTur, Prelude in {
|
||||
|
||||
lin
|
||||
|
||||
@@ -18,4 +19,38 @@ concrete AdjectiveTur of Adjective = CatTur ** open ResTur, Prelude in {
|
||||
s = \\n, c => adv.s ++ ap.s ! n ! c
|
||||
} ;
|
||||
|
||||
AdAP ada ap = {
|
||||
s = \\n, c => ada.s ++ ap.s ! n ! c
|
||||
} ;
|
||||
|
||||
UseA2 a = {s = a.s} ;
|
||||
|
||||
ComplA2 a np = {
|
||||
s = \\n, c => np.s ! a.c.c ++ a.c.s ++ a.s ! n ! c
|
||||
} ;
|
||||
|
||||
-- TODO: Whether this is correct or not requires further examination.
|
||||
ReflA2 a = {
|
||||
s =
|
||||
let
|
||||
kendi : N = mkN "kendi"
|
||||
in
|
||||
\\n, c => kendi.s ! n ! c ++ a.c.s ++ a.s ! n ! Nom
|
||||
} ;
|
||||
|
||||
-- Some examples of using CAdvAP:
|
||||
-- Lang> gt -number=2 -depth=1 (CAdvAP ? ? ?) | l -lang=LangTur
|
||||
-- > Paris kadar kötü
|
||||
-- > o kadar kötü
|
||||
CAdvAP cadv ap np = {
|
||||
s = \\n, c => np.s ! Nom ++ cadv.s ++ ap.s ! n ! c
|
||||
} ;
|
||||
|
||||
-- TODO: Instead of `++ BIND ++ "si"`, sc.s should be treated as a noun
|
||||
-- and it should be inflected to `gen Sg {n = Sg; p = P3}`.
|
||||
SentAP ap sc = {
|
||||
s =
|
||||
\\n, c => sc.s ++ (ap.s ! n ! c)
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
concrete ConjunctionEng of Conjunction =
|
||||
concrete ConjunctionTur of Conjunction =
|
||||
CatTur ** open ResTur, Coordination, Prelude in {
|
||||
|
||||
lin
|
||||
|
||||
-- ConjNP : Conj -> ListNP -> NP
|
||||
-- ConjNP conj ss =
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,12 +4,19 @@ concrete GrammarTur of Grammar =
|
||||
NounTur,
|
||||
VerbTur,
|
||||
AdjectiveTur,
|
||||
AdverbTur,
|
||||
NumeralTur,
|
||||
StructuralTur,
|
||||
SentenceTur,
|
||||
AdverbTur
|
||||
QuestionTur,
|
||||
RelativeTur,
|
||||
ConjunctionTur,
|
||||
TextX,
|
||||
StructuralTur,
|
||||
PhraseTur,
|
||||
IdiomTur,
|
||||
TenseX
|
||||
** {
|
||||
|
||||
flags startcat = Phr ; unlexer = text ; lexer = text ;
|
||||
flags startcat = Phr ;
|
||||
|
||||
} ;
|
||||
|
||||
@@ -5,38 +5,55 @@
|
||||
resource HarmonyTur = ParamX ** open Prelude, Predef in {
|
||||
flags
|
||||
coding=utf8 ;
|
||||
--Harmony
|
||||
param
|
||||
|
||||
-- Consonant are divided into 2 groups: Voiceless vs Voiced or Hard vs Soft.
|
||||
-- This parameter type is used for consonant harmony, namely hardening and softening rules.
|
||||
-- Harmony
|
||||
param
|
||||
-- Consonant are divided into 2 groups: Voiceless vs Voiced or Hard vs Soft.
|
||||
-- This parameter type is used for consonant harmony, namely hardening and
|
||||
-- softening rules.
|
||||
Softness = Soft | Hard ;
|
||||
|
||||
-- Parameter type for consonant harmony:
|
||||
-- Suffixes should have three forms at the worst case for consonant harmony, these forms are
|
||||
-- used when stem ends with:
|
||||
-- 1) soft consonant
|
||||
-- 2) hard consonant
|
||||
-- 3) vowel
|
||||
-- Parameter type for consonant harmony:
|
||||
-- Suffixes should have three
|
||||
-- forms at the worst case for consonant harmony, these forms are
|
||||
-- used when stem ends with:
|
||||
-- 1) soft consonant
|
||||
-- 2) hard consonant
|
||||
-- 3) vowel
|
||||
HarConP = SCon Softness | SVow ;
|
||||
|
||||
-- Parameter type for vowel harmony:
|
||||
-- Suffixes should have 4 forms, because of two dimensional vowel harmony
|
||||
HarVowP = I_Har | U_Har | Ih_Har | Uh_Har ;
|
||||
-- Parameter type for vowel harmony:
|
||||
-- Suffixes should have 4 forms, because of two dimensional vowel harmony
|
||||
HarVowP = I_Har | U_Har | Ih_Har | Uh_Har ;
|
||||
|
||||
oper
|
||||
-- Some pattern macros used by some opers (especially those related to harmonies) in ResTur.gf and ParadigmsTur.gf
|
||||
-- Some pattern macros used by some opers (especially those related to
|
||||
-- harmonies) in ResTur.gf and ParadigmsTur.gf
|
||||
frontVowel : pattern Str = #("e"|"i"|"ö"|"ü") ;
|
||||
backVowel : pattern Str = #("a"|"ı"|"o"|"u") ;
|
||||
|
||||
--Capital forms of vowels are also added, otherwise harmony of proper nouns like "Of" can not be determined
|
||||
vowel : pattern Str = #("a"|"e"|"ı"|"i"|"u"|"ü"|"o"|"ö"|"î"|"â"|"û"|"A"|"E"|"I"|"İ"|"U"|"Ü"|"O"|"Ö"|"Î"|"Â"|"Û") ;
|
||||
consonant : pattern Str = #("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h") ;
|
||||
--Extended consonant are used when proccessing words that contain non-letter characters like "stand-by"
|
||||
extConson : pattern Str = #("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h"|"'"|"-") ;
|
||||
--The following are the hard (voiced) consonant in Turkish Alphabet (Order is determined by "Fıstıkçı Şahap" :) )
|
||||
-- Capital forms of vowels are also added, otherwise harmony of proper
|
||||
-- nouns like "Of" can not be determined
|
||||
vowel : pattern Str =
|
||||
#("a"|"e"|"ı"|"i"|"u"|"ü"|"o"|"ö"|
|
||||
"î"|"â"|"û"|"A"|"E"|"I"|"İ"|"U"|"Ü"|
|
||||
"O"|"Ö"|"Î"|"Â"|"Û") ;
|
||||
|
||||
consonant : pattern Str =
|
||||
#("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"| "l"|"r"|"m"|"n"|
|
||||
"y"|"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h") ;
|
||||
|
||||
-- Extended consonant are used when proccessing words that contain
|
||||
-- non-letter characters like "stand-by"
|
||||
extConson : pattern Str =
|
||||
#("b"|"v"|"d"|"z"|"j"|"c"|"g"|"ğ"|"l"|"r"|"m"|"n"|"y"|
|
||||
"p"|"f"|"t"|"s"|"ş"|"ç"|"k"|"h"|"'"|"-") ;
|
||||
|
||||
-- The following are the hard (voiced) consonant in Turkish Alphabet
|
||||
-- (Order is determined by "Fıstıkçı Şahap" :) )
|
||||
hardCons : pattern Str = #("f"|"s"|"t"|"k"|"ç"|"ş"|"h"|"p") ;
|
||||
|
||||
|
||||
-- Type definition and constructor of Harmony.
|
||||
-- Type definition and constructor of Harmony.
|
||||
Harmony = {
|
||||
vow : HarVowP ;
|
||||
con : HarConP
|
||||
@@ -58,48 +75,55 @@ resource HarmonyTur = ParamX ** open Prelude, Predef in {
|
||||
_ + ("u"|"o"|"û"|"U"|"O"|"Û") + #extConson* => U_Har ;
|
||||
_ + ("ü"|"ö"|"Ü"|"Ö") + #extConson* => Uh_Har ;
|
||||
_ => Ih_Har --this is for yiyor ("y" is base in that case)
|
||||
} ;
|
||||
} ;
|
||||
|
||||
-- Param base : a word, of which softness is to be determined
|
||||
-- Returns whether Soft or Hard form of suffix will be used when adding a suffix to base
|
||||
getSoftness : Str -> Softness = \base -> case dp 1 base of {
|
||||
#hardCons => Hard ;
|
||||
_ => Soft
|
||||
} ;
|
||||
-- Param base : a word, of which softness is to be determined
|
||||
-- Returns whether Soft or Hard form of suffix will be used when adding a
|
||||
-- suffix to base
|
||||
getSoftness : Str -> Softness =
|
||||
\base ->
|
||||
case dp 1 base of {
|
||||
#hardCons => Hard ;
|
||||
_ => Soft
|
||||
} ;
|
||||
|
||||
-- Param larC : the consonant form of suffix of which softness is to be determined
|
||||
-- Returns whether Soft or Hard form of base will be used when adding a suffix to parameter
|
||||
getBeginType : Str -> Softness = \larC -> case take 1 larC of {
|
||||
#vowel => Soft ;
|
||||
_ => Hard
|
||||
} ;
|
||||
-- Param larC : the consonant form of suffix of which softness is to be determined
|
||||
-- Returns whether Soft or Hard form of base will be used when adding a
|
||||
-- suffix to parameter
|
||||
getBeginType : Str -> Softness =
|
||||
\larC ->
|
||||
case take 1 larC of {
|
||||
#vowel => Soft ;
|
||||
_ => Hard
|
||||
} ;
|
||||
|
||||
-- Param base : a word
|
||||
-- Returns which SuffixForm will be used when adding a suffix to base
|
||||
-- Param base : a word
|
||||
-- Returns which SuffixForm will be used when adding a suffix to base
|
||||
getHarConP : Str -> HarConP =
|
||||
\base -> case dp 1 base of {
|
||||
#vowel => SVow ;
|
||||
_ => SCon (getSoftness base)
|
||||
} ;
|
||||
|
||||
-- returns softened form of a base
|
||||
softenBase : Str -> Str = \base ->
|
||||
let root = tk 1 base in
|
||||
case base of {
|
||||
_+ "p" => root + "b" ;
|
||||
_+ "ç" => root + "c" ;
|
||||
_+ "t" => root + "d" ;
|
||||
_+ #consonant + "k" => root + "g" ;
|
||||
_+ #vowel + ("k"|"g") => root + "ğ" ;
|
||||
_ => base
|
||||
} ;
|
||||
|
||||
-- harmony of progresive form of a verb is always the same, therefore it is constructed here to avoid unnecessary computation
|
||||
progHar : Harmony
|
||||
= {
|
||||
vow = U_Har ;
|
||||
con = SCon Soft ;
|
||||
} ;
|
||||
#vowel => SVow ;
|
||||
_ => SCon (getSoftness base)
|
||||
} ;
|
||||
|
||||
-- Returns softened form of a base
|
||||
softenBase : Str -> Str =
|
||||
\base ->
|
||||
let
|
||||
root = tk 1 base
|
||||
in
|
||||
case base of {
|
||||
_+ "p" => root + "b" ;
|
||||
_+ "ç" => root + "c" ;
|
||||
_+ "t" => root + "d" ;
|
||||
_+ #consonant + "k" => root + "g" ;
|
||||
_+ #vowel + ("k"|"g") => root + "ğ" ;
|
||||
_ => base
|
||||
} ;
|
||||
|
||||
-- harmony of progresive form of a verb is always the same, therefore it is
|
||||
-- constructed here to avoid unnecessary computation
|
||||
progHar : Harmony = {
|
||||
vow = U_Har ;
|
||||
con = SCon Soft ;
|
||||
} ;
|
||||
}
|
||||
5
src/turkish/IdiomTur.gf
Normal file
5
src/turkish/IdiomTur.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
concrete IdiomTur of Idiom = CatTur ** open Prelude, ResTur in {
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -245,7 +245,7 @@ concrete LexiconTur of Lexicon = CatTur **
|
||||
wide_A = mkA "geniş" ;
|
||||
yellow_A = mkA "sarı" ;
|
||||
young_A = mkA "genç" ;
|
||||
married_A2 = mkA2 (mkA "evli") with_Prep ;
|
||||
married_A2 = mkA2 (mkA "evli") (mkPrep "ile" Nom) ;
|
||||
--Verbs
|
||||
add_V3 = mkV3 (mkV "eklemek") ;
|
||||
answer_V2S = mkV2S (mkV "yanıtlamak") ;
|
||||
|
||||
@@ -17,6 +17,9 @@ concrete NounTur of Noun = CatTur ** open ResTur, SuffixTur, HarmonyTur, Prelude
|
||||
|
||||
UsePron p = p ;
|
||||
|
||||
-- TODO: look further into how correct this is.
|
||||
UsePN pn = { s = \\c => pn.s ! Sg ! c; a = {n = Sg; p = P1}} ;
|
||||
|
||||
PossPron p = {s = []; useGen = YesGen p.a} ;
|
||||
|
||||
DetQuant quant num = {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
30
src/turkish/PhraseTur.gf
Normal file
30
src/turkish/PhraseTur.gf
Normal file
@@ -0,0 +1,30 @@
|
||||
concrete PhraseTur of Phrase = CatTur ** open Prelude, ResTur in {
|
||||
lin
|
||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||
|
||||
-- The following are utterly untested.
|
||||
-- Currently, they should be treated as just implementation stubs.
|
||||
UttQS qs = {s = qs.s} ;
|
||||
UttImpSg pol imp = {s = imp.s} ;
|
||||
UttImpPl pol imp = {s = imp.s} ;
|
||||
UttImpPol pol imp = {s = imp.s} ;
|
||||
UttIP ip = {s = ip.s} ;
|
||||
UttIAdv iadv = iadv ;
|
||||
UttCard n = {s = n.s ! Sg ! Nom} ;
|
||||
UttInterj i = i ;
|
||||
|
||||
-- The following have been somewhat tested and seem to be working fine
|
||||
-- to some extent.
|
||||
UttNP np = {s = np.s ! Nom} ;
|
||||
UttVP vp = {s = vp.s ! VInfinitive} ;
|
||||
UttAP ap = {s = ap.s ! Sg ! Nom} ;
|
||||
UttCN n = {s = n.s ! Sg ! Nom} ;
|
||||
UttS s = s ;
|
||||
UttAdv adv = adv ;
|
||||
|
||||
NoPConj = {s = []} ;
|
||||
PConjConj conj = {s = conj.s} ;
|
||||
|
||||
NoVoc = {s = []} ;
|
||||
VocNP np = {s = np.s ! Nom} ;
|
||||
}
|
||||
4
src/turkish/QuestionTur.gf
Normal file
4
src/turkish/QuestionTur.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
concrete QuestionTur of Question = CatTur ** open ResTur, Prelude in {
|
||||
|
||||
|
||||
}
|
||||
4
src/turkish/RelativeTur.gf
Normal file
4
src/turkish/RelativeTur.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
concrete RelativeTur of Relative = CatTur ** open ResTur in {
|
||||
|
||||
|
||||
}
|
||||
@@ -14,7 +14,11 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
|
||||
|
||||
oper
|
||||
Agr = {n : Number ; p : Person} ;
|
||||
Noun = {s : Number => Case => Str; gen : Number => Agr => Str; harmony : Harmony} ;
|
||||
Noun = {
|
||||
s : Number => Case => Str ;
|
||||
gen : Number => Agr => Str ;
|
||||
harmony : Harmony
|
||||
} ;
|
||||
Pron = {s : Case => Str; a : Agr} ;
|
||||
|
||||
agrP3 : Number -> Agr ;
|
||||
@@ -32,6 +36,7 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
|
||||
| VAorist Agr
|
||||
| VImperative
|
||||
| VInfinitive
|
||||
| Gerund Number Case
|
||||
;
|
||||
|
||||
UseGen = NoGen | YesGen Agr | UseIndef ;
|
||||
@@ -70,4 +75,14 @@ resource ResTur = ParamX ** open Prelude, Predef, HarmonyTur in {
|
||||
|
||||
mkClause : Str -> Agr -> Verb -> {s : Str} =
|
||||
\np, a, v -> ss (np ++ v.s ! VProg a) ;
|
||||
|
||||
attachMe : Verb -> {s : Str} =
|
||||
\v ->
|
||||
let
|
||||
s : Str = v.s ! VImperative
|
||||
in
|
||||
case s of {
|
||||
(_ + #vowel + _ )* + (_ + #frontVowel + _) => ss (s ++ "me") ;
|
||||
(_ + #vowel + _)* + (_ + #backVowel + _) => ss (s ++ "ma")
|
||||
} ;
|
||||
}
|
||||
|
||||
@@ -4,4 +4,7 @@ concrete SentenceTur of Sentence = CatTur ** open Prelude, ResTur in {
|
||||
|
||||
PredVP np vp = mkClause (np.s ! Nom) np.a vp ;
|
||||
|
||||
-- TODO: Check how correct this is.
|
||||
EmbedVP vp = {s = (vp.s ! Gerund Sg Acc)} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -87,4 +87,10 @@ concrete StructuralTur of Structural = CatTur **
|
||||
|
||||
but_PConj = ss "ama" ;
|
||||
|
||||
at_most_AdN = ss "en fazla" ;
|
||||
|
||||
at_least_AdN = ss "en az" ;
|
||||
|
||||
as_CAdv = {s = "kadar"; p = "kadar"} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -278,27 +278,30 @@ resource SuffixTur = open Prelude, Predef, ResTur, HarmonyTur in {
|
||||
_ => wordC.p1
|
||||
} ;
|
||||
|
||||
-- An auxiallary oper that fills in SuffixTable, used to avoid copy-paste
|
||||
makeH4Table : {p1 : Str ; p2 : Str ; p3 : Str ; p4 : Str ;} -> {p1 : Str ; p2 : Str ; p3 : Str ; p4 : Str ; p5 : Str ; p6 : Str ; p7 : Str ; p8 : Str ;} -> SuffixTable =
|
||||
\lirV,lirC ->
|
||||
table {
|
||||
SVow => table {
|
||||
I_Har => lirV.p1 ;
|
||||
Ih_Har => lirV.p2 ;
|
||||
U_Har => lirV.p3 ;
|
||||
Uh_Har => lirV.p4
|
||||
} ;
|
||||
SCon Soft => table {
|
||||
I_Har => lirC.p1 ;
|
||||
Ih_Har => lirC.p2 ;
|
||||
U_Har => lirC.p3 ;
|
||||
Uh_Har => lirC.p4
|
||||
} ;
|
||||
SCon Hard => table {
|
||||
I_Har => lirC.p5 ;
|
||||
Ih_Har => lirC.p6 ;
|
||||
U_Har => lirC.p7 ;
|
||||
Uh_Har => lirC.p8
|
||||
}
|
||||
} ;
|
||||
-- An auxiliary oper that fills in SuffixTable, used to avoid copy-paste
|
||||
makeH4Table : {p1 : Str ; p2 : Str ; p3 : Str ; p4 : Str ;}
|
||||
-> {p1 : Str ; p2 : Str ; p3 : Str ; p4 : Str ;
|
||||
p5 : Str ; p6 : Str ; p7 : Str ; p8 : Str }
|
||||
-> SuffixTable =
|
||||
\lirV,lirC ->
|
||||
table {
|
||||
SVow => table {
|
||||
I_Har => lirV.p1 ;
|
||||
Ih_Har => lirV.p2 ;
|
||||
U_Har => lirV.p3 ;
|
||||
Uh_Har => lirV.p4
|
||||
} ;
|
||||
SCon Soft => table {
|
||||
I_Har => lirC.p1 ;
|
||||
Ih_Har => lirC.p2 ;
|
||||
U_Har => lirC.p3 ;
|
||||
Uh_Har => lirC.p4
|
||||
} ;
|
||||
SCon Hard => table {
|
||||
I_Har => lirC.p5 ;
|
||||
Ih_Har => lirC.p6 ;
|
||||
U_Har => lirC.p7 ;
|
||||
Uh_Har => lirC.p8
|
||||
}
|
||||
} ;
|
||||
}
|
||||
Reference in New Issue
Block a user