forked from GitHub/gf-rgl
Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl
This commit is contained in:
@@ -12,7 +12,7 @@ addons:
|
|||||||
- ghc
|
- ghc
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install ghc@8.2 && export PATH="/usr/local/opt/ghc@8.2/bin:$PATH" ; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update && brew install ghc@8.6 && export PATH="/usr/local/opt/ghc@8.6/bin:$PATH" ; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl http://www.grammaticalframework.org/download/gf-3.9-bin-intel-mac.tar.gz > gf.tar.gz && sudo tar --no-same-owner --no-same-permissions -C /usr/local -zxf gf.tar.gz && rm gf.tar.gz; fi
|
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then curl http://www.grammaticalframework.org/download/gf-3.9-bin-intel-mac.tar.gz > gf.tar.gz && sudo tar --no-same-owner --no-same-permissions -C /usr/local -zxf gf.tar.gz && rm gf.tar.gz; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then curl http://www.grammaticalframework.org/download/gf_3.9.1-1_amd64-trusty.deb > gf.deb && sudo dpkg -i gf.deb && rm gf.deb ; fi
|
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then curl http://www.grammaticalframework.org/download/gf_3.9.1-1_amd64-trusty.deb > gf.deb && sudo dpkg -i gf.deb && rm gf.deb ; fi
|
||||||
- if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then choco install ghc --version=8.4.4 && export PATH="/c/ProgramData/chocolatey/lib/ghc/tools/ghc-8.4.4/bin:$PATH"; fi
|
- if [[ "$TRAVIS_OS_NAME" == "windows" ]]; then choco install ghc --version=8.4.4 && export PATH="/c/ProgramData/chocolatey/lib/ghc/tools/ghc-8.4.4/bin:$PATH"; fi
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
The GF Resource Grammar Library is the standard library for Grammatical Framework. It covers the morphology and basic syntax of over 30 languages.
|
The GF Resource Grammar Library is the standard library for Grammatical Framework. It covers the morphology and basic syntax of over 30 languages.
|
||||||
|
|
||||||
For more about the RGL, see the [synopsis page](http://www.grammaticalframework.org/lib/doc/synopsis.html).
|
For more about the RGL, see the [synopsis page](http://www.grammaticalframework.org/lib/doc/synopsis/).
|
||||||
|
|
||||||
## Choose your build method
|
## Choose your build method
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ abstract functions and their Universal Dependency labels
|
|||||||
- Paper "The GF Resource Grammar Library" by A. Ranta
|
- Paper "The GF Resource Grammar Library" by A. Ranta
|
||||||
(//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of
|
(//Linguistic Issues in Language Technology//, 2 (2), 2009). An overview of
|
||||||
the library with linguistic motivations.
|
the library with linguistic motivations.
|
||||||
[PDF https://journals.linguisticsociety.org/elanguage/lilt/article/download/214/214-501-1-PB.pdf]
|
[PDF http://journals.linguisticsociety.org/elanguage/lilt/article/download/214/214-501-1-PB.pdf]
|
||||||
- Paper "Grammars as Software Libraries" by A. Ranta
|
- Paper "Grammars as Software Libraries" by A. Ranta
|
||||||
(In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),
|
(In Y. Bertot, G. Huet, J-J. Lévy, and G. Plotkin (eds.),
|
||||||
//From Semantics to Computer Science//, Cambridge University Press,
|
//From Semantics to Computer Science//, Cambridge University Press,
|
||||||
|
|||||||
@@ -328,6 +328,21 @@ concrete ConjunctionJpn of Conjunction = CatJpn ** open ResJpn, Prelude in {
|
|||||||
prepositive = \\st => x.prepositive ! st ++ y.prepositive ! st
|
prepositive = \\st => x.prepositive ! st ++ y.prepositive ! st
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
ConsAP x xs = {
|
||||||
|
s1and = x.te ;
|
||||||
|
s1or = \\st => table {
|
||||||
|
Pos => x.dropNaEnging ! st ++ "か" ;
|
||||||
|
Neg => x.pred ! Plain ! TPres ! Neg ++ "か"
|
||||||
|
} ;
|
||||||
|
s2pred = \\st,t,p => xs.s1and ! st ! p ++ xs.s2pred ! st ! t ! p ;
|
||||||
|
s2attr = \\st => xs.s1and ! st ! Pos ++ xs.s2attr ! st ;
|
||||||
|
s2te = \\st,p => xs.s1and ! st ! p ++ xs.s2te ! st ! p ;
|
||||||
|
s2ba = \\st,p => xs.s1and ! st ! p ++ xs.s2ba ! st ! p ;
|
||||||
|
s2adv = \\st => xs.s1and ! st ! Pos ++ xs.s2adv ! st ;
|
||||||
|
s2dropNaEnging = xs.s2dropNaEnging ;
|
||||||
|
prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st
|
||||||
|
} ;
|
||||||
|
{-
|
||||||
ConsAP x xs = {
|
ConsAP x xs = {
|
||||||
s1and = \\st,p => xs.s1and ! st ! p ++ xs.s2te ! st ! p ;
|
s1and = \\st,p => xs.s1and ! st ! p ++ xs.s2te ! st ! p ;
|
||||||
s1or = \\st => table {
|
s1or = \\st => table {
|
||||||
@@ -342,7 +357,7 @@ concrete ConjunctionJpn of Conjunction = CatJpn ** open ResJpn, Prelude in {
|
|||||||
s2dropNaEnging = x.dropNaEnging ;
|
s2dropNaEnging = x.dropNaEnging ;
|
||||||
prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st
|
prepositive = \\st => x.prepositive ! st ++ xs.prepositive ! st
|
||||||
} ;
|
} ;
|
||||||
|
-}
|
||||||
BaseIAdv x y = {
|
BaseIAdv x y = {
|
||||||
s = \\st => x.s ! st ++ x.particle ++ y.s ! st ;
|
s = \\st => x.s ! st ++ x.particle ++ y.s ! st ;
|
||||||
particle = y.particle ;
|
particle = y.particle ;
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ flags coding = utf8 ;
|
|||||||
lin
|
lin
|
||||||
|
|
||||||
add_V3 = mkV3 "加える" "に" "を" Gr2 ; -- "kuwaeru"
|
add_V3 = mkV3 "加える" "に" "を" Gr2 ; -- "kuwaeru"
|
||||||
airplane_N = mkN "飛行機" Inanim "機" False ; -- "hikouki" "ki"
|
airplane_N = mkN "飛行機" Inanim "機" ; -- "hikouki" "ki"
|
||||||
alas_Interj = ss "残念です" ; -- "zannendesu"
|
alas_Interj = ss "残念です" ; -- "zannendesu"
|
||||||
already_Adv = ResJpn.mkAdv "すでに" ; -- "sudeni"
|
already_Adv = ResJpn.mkAdv "すでに" ; -- "sudeni"
|
||||||
animal_N = mkN "動物" Anim "疋" True ; -- "doubutsu" "hiki"
|
animal_N = mkN "動物" Anim ; -- "doubutsu"
|
||||||
answer_V2S = mkV "答える" Gr2 ; -- "kotaeru"
|
answer_V2S = mkV "答える" Gr2 ; -- "kotaeru"
|
||||||
apartment_N = mkN "アパート" Inanim ; -- "apaato"
|
apartment_N = mkN "アパート" Inanim ; -- "apaato"
|
||||||
apple_N = mkN "リンゴ" Inanim "個" False ; -- "ringo" "ko"
|
apple_N = mkN "リンゴ" Inanim "個" ; -- "ringo" "ko"
|
||||||
art_N = mkN "芸術" Inanim ; -- "geijutsu"
|
art_N = mkN "芸術" Inanim ; -- "geijutsu"
|
||||||
ashes_N = mkN "灰" Inanim ; -- "hai"
|
ashes_N = mkN "灰" Inanim ; -- "hai"
|
||||||
ask_V2Q = mkV "聞く" Gr1 ; -- "kiku"
|
ask_V2Q = mkV "聞く" Gr1 ; -- "kiku"
|
||||||
@@ -22,24 +22,24 @@ lin
|
|||||||
bark_N = mkN "木皮" Inanim ; -- "kohada"
|
bark_N = mkN "木皮" Inanim ; -- "kohada"
|
||||||
beautiful_A = mkA "美しい" ; -- "utsukushii"
|
beautiful_A = mkA "美しい" ; -- "utsukushii"
|
||||||
become_VA = mkV "なる" Gr1 ; -- "naru"
|
become_VA = mkV "なる" Gr1 ; -- "naru"
|
||||||
beer_N = mkN "ビール" Inanim "杯" False ; -- "biiru" "hai"
|
beer_N = mkN "ビール" Inanim ; -- "biiru"
|
||||||
beg_V2V = mkV "請い願う" Gr1 ; -- "koinegau"
|
beg_V2V = mkV "請い願う" Gr1 ; -- "koinegau"
|
||||||
belly_N = mkN "お腹" "腹" Inanim ; -- "onaka" "hara"
|
belly_N = mkN "お腹" "腹" Inanim ; -- "onaka" "hara"
|
||||||
big_A = mkA "大きな" ; -- "ookina"
|
big_A = mkA "大きな" ; -- "ookina"
|
||||||
bike_N = mkN "自転車" Inanim "台" False ; -- "jitensha" "dai"
|
bike_N = mkN "自転車" Inanim "台" ; -- "jitensha" "dai"
|
||||||
bird_N = mkN "鳥" Anim "羽" False ; -- "tori" "wa"
|
bird_N = mkN "鳥" Anim "羽" ; -- "tori" "wa"
|
||||||
bite_V2 = mkV2 "噛む" "を" Gr1 ; -- "kamu"
|
bite_V2 = mkV2 "噛む" "を" Gr1 ; -- "kamu"
|
||||||
black_A = mkA "黒い" ; -- "kuroi" ;
|
black_A = mkA "黒い" ; -- "kuroi" ;
|
||||||
blood_N = mkN "血液" Inanim ; -- "ketsueki"
|
blood_N = mkN "血液" Inanim ; -- "ketsueki"
|
||||||
blow_V = mkV "吹く" Gr1 ; -- "fuku"
|
blow_V = mkV "吹く" Gr1 ; -- "fuku"
|
||||||
blue_A = mkA "青い" ; -- "aoi" ;
|
blue_A = mkA "青い" ; -- "aoi" ;
|
||||||
boat_N = mkN "ボート" Inanim "艘" False ; -- "bouto" "sou"
|
boat_N = mkN "ボート" Inanim "艘" ; -- "bouto" "sou"
|
||||||
bone_N = mkN "骨" Inanim ; -- "hone"
|
bone_N = mkN "骨" Inanim ; -- "hone"
|
||||||
book_N = mkN "本" Inanim "冊" False ; -- "hon" "satsu"
|
book_N = mkN "本" Inanim "冊" ; -- "hon" "satsu"
|
||||||
boot_N = mkN "ブート" Inanim ; -- "buuto"
|
boot_N = mkN "ブート" Inanim ; -- "buuto"
|
||||||
boss_N = mkN "社長" Anim "人" False "社長たち" ; -- "shachou"
|
boss_N = mkN "社長" Anim "人" False "社長たち" ; -- "shachou"
|
||||||
boy_N = mkN "男の子" Anim "人" False "男の子たち" ; -- "otokonoko"
|
boy_N = mkN "男の子" Anim "人" False "男の子たち" ; -- "otokonoko"
|
||||||
bread_N = mkN "パン" Inanim "斤" False ; -- "pan" "kin"
|
bread_N = mkN "パン" Inanim "斤" ; -- "pan" "kin"
|
||||||
break_V2 = mkV2 "破る" "を" Gr1 ; -- "yaburu"
|
break_V2 = mkV2 "破る" "を" Gr1 ; -- "yaburu"
|
||||||
breast_N = mkN "胸" Inanim ; -- "mune"
|
breast_N = mkN "胸" Inanim ; -- "mune"
|
||||||
breathe_V = mkV "息する" Suru ; -- "ikisuru"
|
breathe_V = mkV "息する" Suru ; -- "ikisuru"
|
||||||
@@ -51,20 +51,20 @@ lin
|
|||||||
buy_V2 = mkV2 "買う" "を" Gr1 ; -- "kau"
|
buy_V2 = mkV2 "買う" "を" Gr1 ; -- "kau"
|
||||||
camera_N = mkN "カメラ" Inanim ; -- "kamera"
|
camera_N = mkN "カメラ" Inanim ; -- "kamera"
|
||||||
cap_N = mkN "キャップ" Inanim ; -- "kyappu"
|
cap_N = mkN "キャップ" Inanim ; -- "kyappu"
|
||||||
car_N = mkN "車" Inanim "車" True ; -- "kuruma" "sha"
|
car_N = mkN "車" Inanim "台" ; -- "kuruma" "dai"
|
||||||
carpet_N = mkN "絨毯" Inanim ; -- "juutan"
|
carpet_N = mkN "絨毯" Inanim ; -- "juutan"
|
||||||
cat_N = mkN "猫" Anim "匹" False ; -- "neko" "hiki"
|
cat_N = mkN "猫" Anim "匹" ; -- "neko" "hiki"
|
||||||
ceiling_N = mkN "天井" Inanim ; -- "tenjou"
|
ceiling_N = mkN "天井" Inanim ; -- "tenjou"
|
||||||
chair_N = mkN "椅子" Inanim "脚" False ; -- "isu" "kyaku"
|
chair_N = mkN "椅子" Inanim "脚" ; -- "isu" "kyaku"
|
||||||
cheese_N = mkN "チーズ" Inanim ; -- "chiizu"
|
cheese_N = mkN "チーズ" Inanim ; -- "chiizu"
|
||||||
child_N = mkN "子供" Anim "人" False ; -- "kodomo"
|
child_N = mkN "子供" Anim "人" ; -- "kodomo"
|
||||||
church_N = mkN "教会" Inanim "軒" False ; -- "kyoukai" "ken"
|
church_N = mkN "教会" Inanim ; -- "kyoukai"
|
||||||
city_N = mkN "都市" Inanim ; -- "toshi"
|
city_N = mkN "都市" Inanim ; -- "toshi"
|
||||||
clean_A = mkA "奇麗な" ; -- "kireina" ;
|
clean_A = mkA "奇麗な" ; -- "kireina" ;
|
||||||
clever_A = mkA "賢い" ; -- "kashikoi" ;
|
clever_A = mkA "賢い" ; -- "kashikoi" ;
|
||||||
close_V2 = mkV2 "閉める" "を" Gr2 ; -- "shimeru"
|
close_V2 = mkV2 "閉める" "を" Gr2 ; -- "shimeru"
|
||||||
cloud_N = mkN "雲" Inanim ; -- "kumo"
|
cloud_N = mkN "雲" Inanim ; -- "kumo"
|
||||||
coat_N = mkN "コート" Inanim ; -- "kouto"
|
coat_N = mkN "コート" Inanim "着" False ; -- "kouto" "chaku"
|
||||||
cold_A = mkA "寒い" ; -- "samui" ;
|
cold_A = mkA "寒い" ; -- "samui" ;
|
||||||
come_V = mkV "来る" Kuru ; -- "ko" "ki" "kuru" "kita"
|
come_V = mkV "来る" Kuru ; -- "ko" "ki" "kuru" "kita"
|
||||||
computer_N = mkN "コンピュータ" Inanim ; -- "konpyuuta"
|
computer_N = mkN "コンピュータ" Inanim ; -- "konpyuuta"
|
||||||
@@ -72,15 +72,15 @@ lin
|
|||||||
country_N = mkN "国" Inanim "ヶ国" True ; -- "kuni" "kakoku"
|
country_N = mkN "国" Inanim "ヶ国" True ; -- "kuni" "kakoku"
|
||||||
count_V2 = mkV2 "数える" "を" Gr2 ; -- "kazoeru"
|
count_V2 = mkV2 "数える" "を" Gr2 ; -- "kazoeru"
|
||||||
cousin_N = mkN "いとこ" Anim "人" False "いとこたち" ; -- "itoko"
|
cousin_N = mkN "いとこ" Anim "人" False "いとこたち" ; -- "itoko"
|
||||||
cow_N = mkN "牛" Anim "頭" False ; -- "ushi" "tou"
|
cow_N = mkN "牛" Anim "頭" ; -- "ushi" "tou"
|
||||||
cut_V2 = mkV2 "切る" "を" Gr1 ; -- "kiru"
|
cut_V2 = mkV2 "切る" "を" Gr1 ; -- "kiru"
|
||||||
day_N = mkN "日" Inanim "日" True ; -- "hi" "ka";
|
day_N = mkN "日" Inanim True ; -- "hi" "ka";
|
||||||
die_V = mkV "死ぬ" Gr1 ; -- "shinu"
|
die_V = mkV "死ぬ" Gr1 ; -- "shinu"
|
||||||
dig_V = mkV "掘る" Gr1 ; -- "horu"
|
dig_V = mkV "掘る" Gr1 ; -- "horu"
|
||||||
dirty_A = mkA "汚い" ; -- "kitanai" ;
|
dirty_A = mkA "汚い" ; -- "kitanai" ;
|
||||||
distance_N3 = mkN3 "距離" "から" "まで" Inanim ; -- "kyori" "kara" "made"
|
distance_N3 = mkN3 "距離" "から" "まで" Inanim ; -- "kyori" "kara" "made"
|
||||||
doctor_N = mkN "医者" Anim "人" False "医者たち" ; -- "isha"
|
doctor_N = mkN "医者" Anim "人" False "医者たち" ; -- "isha"
|
||||||
dog_N = mkN "犬" Anim "匹" False ; -- "inu" "hiki"
|
dog_N = mkN "犬" Anim "匹" ; -- "inu" "hiki"
|
||||||
door_N = mkN "ドア" Inanim ; -- "doa"
|
door_N = mkN "ドア" Inanim ; -- "doa"
|
||||||
do_V2 = mkV2 "する" "を" Suru ; -- "suru"
|
do_V2 = mkV2 "する" "を" Suru ; -- "suru"
|
||||||
drink_V2 = mkV2 "飲む" "を" Gr1 ; -- "nomu"
|
drink_V2 = mkV2 "飲む" "を" Gr1 ; -- "nomu"
|
||||||
@@ -107,10 +107,10 @@ lin
|
|||||||
find_V2 = mkV2 "拾う" "を" Gr1 ; -- "hirou"
|
find_V2 = mkV2 "拾う" "を" Gr1 ; -- "hirou"
|
||||||
fingernail_N = mkN "爪" Inanim ; -- "tsume"
|
fingernail_N = mkN "爪" Inanim ; -- "tsume"
|
||||||
fire_N = mkN "火" Inanim ; -- "hi"
|
fire_N = mkN "火" Inanim ; -- "hi"
|
||||||
fish_N = mkN "魚" Anim "匹" False ; -- "sakana" "hiki"
|
fish_N = mkN "魚" Anim "匹" ; -- "sakana" "hiki"
|
||||||
float_V = mkV "浮く" Gr1 ; -- "uku"
|
float_V = mkV "浮く" Gr1 ; -- "uku"
|
||||||
floor_N = mkN "床" Inanim ; -- "yuka"
|
floor_N = mkN "床" Inanim ; -- "yuka"
|
||||||
flower_N = mkN "花" Inanim "輪" False ; -- "sakana" "rin"
|
flower_N = mkN "花" Inanim ; -- "sakana"
|
||||||
flow_V = mkV "流れる" Gr2 ; -- "nagareru"
|
flow_V = mkV "流れる" Gr2 ; -- "nagareru"
|
||||||
fly_V = mkV "飛ぶ" Gr1 ; -- "tobu"
|
fly_V = mkV "飛ぶ" Gr1 ; -- "tobu"
|
||||||
fog_N = mkN "霧" Inanim ; -- "kiri"
|
fog_N = mkN "霧" Inanim ; -- "kiri"
|
||||||
@@ -119,8 +119,8 @@ lin
|
|||||||
forget_V2 = mkV2 "忘れる" "を" Gr2 ; -- "wasureru"
|
forget_V2 = mkV2 "忘れる" "を" Gr2 ; -- "wasureru"
|
||||||
freeze_V = mkV "凍らす" Gr1 ; -- "kourasu"
|
freeze_V = mkV "凍らす" Gr1 ; -- "kourasu"
|
||||||
fridge_N = mkN "冷蔵庫" Inanim ; -- "reizouko"
|
fridge_N = mkN "冷蔵庫" Inanim ; -- "reizouko"
|
||||||
friend_N = mkN "友だち" Anim "人" False ; -- "tomodachi"
|
friend_N = mkN "友だち" Anim "人" ; -- "tomodachi"
|
||||||
fruit_N = mkN "果物" Inanim "個" False ; -- "kudamono" "ko"
|
fruit_N = mkN "果物" Inanim ; -- "kudamono"
|
||||||
full_A = mkA "一杯の" ; -- "ippaino" ;
|
full_A = mkA "一杯の" ; -- "ippaino" ;
|
||||||
fun_AV = mkA "可笑しい" ; -- "okashii" ;
|
fun_AV = mkA "可笑しい" ; -- "okashii" ;
|
||||||
garden_N = mkN "庭" Inanim ; -- "niwa"
|
garden_N = mkN "庭" Inanim ; -- "niwa"
|
||||||
@@ -147,10 +147,10 @@ lin
|
|||||||
hit_V2 = mkV2 "打つ" "を" Gr1 ; -- "utsu"
|
hit_V2 = mkV2 "打つ" "を" Gr1 ; -- "utsu"
|
||||||
hold_V2 = mkV2 "持つ" "を" Gr1 ; -- "motsu"
|
hold_V2 = mkV2 "持つ" "を" Gr1 ; -- "motsu"
|
||||||
hope_VS = mkV2 "期待する" "ことを" Suru ; -- "kitaisuru"
|
hope_VS = mkV2 "期待する" "ことを" Suru ; -- "kitaisuru"
|
||||||
horn_N = mkN "角" Inanim "本" False ; -- "tsuno" "hon"
|
horn_N = mkN "角" Inanim "本" ; -- "tsuno" "hon"
|
||||||
horse_N = mkN "馬" Anim "頭" False ; -- "uma" "tou"
|
horse_N = mkN "馬" Anim "頭" ; -- "uma" "tou"
|
||||||
hot_A = mkA "熱い" ; -- "atsui"
|
hot_A = mkA "熱い" ; -- "atsui"
|
||||||
house_N = mkN "家" Inanim "軒" True ; -- "ie" "ken"
|
house_N = mkN "家" Inanim "軒" ; -- "ie" "ken"
|
||||||
hunt_V2 = mkV2 "狩る" "を" Gr1 ; -- "karu"
|
hunt_V2 = mkV2 "狩る" "を" Gr1 ; -- "karu"
|
||||||
husband_N = mkN "夫" Anim "人" False "夫たち" ; -- "otto"
|
husband_N = mkN "夫" Anim "人" False "夫たち" ; -- "otto"
|
||||||
ice_N = mkN "氷" Inanim ; -- "kouri"
|
ice_N = mkN "氷" Inanim ; -- "kouri"
|
||||||
@@ -167,9 +167,9 @@ lin
|
|||||||
know_VS = mkV2 "知る" "ことを" Gr1 ; -- "shiru"
|
know_VS = mkV2 "知る" "ことを" Gr1 ; -- "shiru"
|
||||||
lake_N = mkN "湖" Inanim ; -- "mizuumi"
|
lake_N = mkN "湖" Inanim ; -- "mizuumi"
|
||||||
lamp_N = mkN "電灯" Inanim ; -- "dentou"
|
lamp_N = mkN "電灯" Inanim ; -- "dentou"
|
||||||
language_N = mkN "言語" Inanim "語" True ; -- "gengo" "go"
|
language_N = mkN "言語" Inanim ; -- "gengo"
|
||||||
laugh_V = mkV "笑う" Gr1 ; -- "warau"
|
laugh_V = mkV "笑う" Gr1 ; -- "warau"
|
||||||
leaf_N = mkN "葉" Inanim "葉" True ; -- "ha" "ha"
|
leaf_N = mkN "葉" Inanim "枚" ; -- "ha" "mai"
|
||||||
learn_V2 = mkV2 "学ぶ" "を" Gr1 ; -- "manabu"
|
learn_V2 = mkV2 "学ぶ" "を" Gr1 ; -- "manabu"
|
||||||
leather_N = mkN "皮革" Inanim ; -- "hikaku"
|
leather_N = mkN "皮革" Inanim ; -- "hikaku"
|
||||||
leave_V2 = mkV2 "残す" "を" Gr1 ; -- "nokosu"
|
leave_V2 = mkV2 "残す" "を" Gr1 ; -- "nokosu"
|
||||||
@@ -182,7 +182,7 @@ lin
|
|||||||
live_V = mkV "住む" Gr1 ; -- "sumu"
|
live_V = mkV "住む" Gr1 ; -- "sumu"
|
||||||
long_A = mkA "長い" ; -- "nagai"
|
long_A = mkA "長い" ; -- "nagai"
|
||||||
lose_V2 = mkV2 "失う" "を" Gr1 ; -- "ushinau"
|
lose_V2 = mkV2 "失う" "を" Gr1 ; -- "ushinau"
|
||||||
louse_N = mkN "虱" Anim "匹" False ; -- "shirami" "hiki"
|
louse_N = mkN "虱" Anim "匹" ; -- "shirami" "hiki"
|
||||||
love_N = mkN "愛" Inanim ; -- "ai"
|
love_N = mkN "愛" Inanim ; -- "ai"
|
||||||
love_V2 = mkV2 "愛する" "を" Suru ; -- "aisuru"
|
love_V2 = mkV2 "愛する" "を" Suru ; -- "aisuru"
|
||||||
man_N = mkN "男" Anim "人" False "男たち" ; -- "otoko"
|
man_N = mkN "男" Anim "人" False "男たち" ; -- "otoko"
|
||||||
@@ -191,7 +191,7 @@ lin
|
|||||||
milk_N = mkN "ミルク" Inanim ; -- "miruku"
|
milk_N = mkN "ミルク" Inanim ; -- "miruku"
|
||||||
moon_N = mkN "月" Inanim ; -- "tsuki"
|
moon_N = mkN "月" Inanim ; -- "tsuki"
|
||||||
mother_N2 = mkN2 "お母さん" Anim "人" False "お母さんたち" "の" ; -- "okaasan"
|
mother_N2 = mkN2 "お母さん" Anim "人" False "お母さんたち" "の" ; -- "okaasan"
|
||||||
mountain_N = mkN "山" Inanim "座" False ; -- "yama" "za"
|
mountain_N = mkN "山" Inanim ; -- "yama"
|
||||||
mouth_N = mkN "口" Inanim ; -- "kuchi"
|
mouth_N = mkN "口" Inanim ; -- "kuchi"
|
||||||
music_N = mkN "音楽" Inanim ; -- "ongaku"
|
music_N = mkN "音楽" Inanim ; -- "ongaku"
|
||||||
name_N = mkN "名前" "お名前" Inanim ; -- "namae" "onamae"
|
name_N = mkN "名前" "お名前" Inanim ; -- "namae" "onamae"
|
||||||
@@ -199,19 +199,19 @@ lin
|
|||||||
near_A = mkA "近い" ; -- "chikai"
|
near_A = mkA "近い" ; -- "chikai"
|
||||||
neck_N = mkN "首" Inanim ; -- "kubi"
|
neck_N = mkN "首" Inanim ; -- "kubi"
|
||||||
new_A = mkA "新しい" ; -- "atarashii"
|
new_A = mkA "新しい" ; -- "atarashii"
|
||||||
newspaper_N = mkN "新聞" Inanim "部" False ; -- "shimbun" "bu"
|
newspaper_N = mkN "新聞" Inanim "紙" ; -- "shimbun" "shi"
|
||||||
night_N = mkN "夜" Inanim "夜" True ; -- "yoru" "ya"
|
night_N = mkN "夜" Inanim True ; -- "yoru" "ya"
|
||||||
nose_N = mkN "鼻" Inanim ; -- "hana"
|
nose_N = mkN "鼻" Inanim ; -- "hana"
|
||||||
now_Adv = ResJpn.mkAdv "今" ; -- "ima"
|
now_Adv = ResJpn.mkAdv "今" ; -- "ima"
|
||||||
number_N = mkN "数" Inanim "数" True ; -- "kazu" "suu"
|
number_N = mkN "数" Inanim ; -- "kazu"
|
||||||
oil_N = mkN "油" Inanim ; -- "abura"
|
oil_N = mkN "油" Inanim ; -- "abura"
|
||||||
old_A = mkA "古い" ; -- "furui"
|
old_A = mkA "古い" ; -- "furui"
|
||||||
open_V2 = mkV2 "開く" "を" Gr1 ; -- "hiraku"
|
open_V2 = mkV2 "開く" "を" Gr1 ; -- "hiraku"
|
||||||
paint_V2A = mkV "塗る" Gr1 ; -- "nuru"
|
paint_V2A = mkV "塗る" Gr1 ; -- "nuru"
|
||||||
paper_N = mkN "紙" Inanim "葉" False ; -- "kami" "you"
|
paper_N = mkN "紙" Inanim "枚" ; -- "kami" "mai"
|
||||||
paris_PN = mkPN "パリ" ;
|
paris_PN = mkPN "パリ" ;
|
||||||
peace_N = mkN "平和" Inanim ; -- "heiwa"
|
peace_N = mkN "平和" Inanim ; -- "heiwa"
|
||||||
pen_N = mkN "ペン" Inanim "本" False ; -- "pen" "hon"
|
pen_N = mkN "ペン" Inanim "本" ; -- "pen" "hon"
|
||||||
person_N = mkN "人" Anim "人" True "人たち" ; -- "hito"
|
person_N = mkN "人" Anim "人" True "人たち" ; -- "hito"
|
||||||
planet_N = mkN "惑星" Inanim ; -- "wakusei"
|
planet_N = mkN "惑星" Inanim ; -- "wakusei"
|
||||||
plastic_N = mkN "プラスチック" Inanim ; -- "purasutikku"
|
plastic_N = mkN "プラスチック" Inanim ; -- "purasutikku"
|
||||||
@@ -224,7 +224,7 @@ lin
|
|||||||
push_V2 = mkV2 "押す" "を" Gr1 ; -- "osu"
|
push_V2 = mkV2 "押す" "を" Gr1 ; -- "osu"
|
||||||
put_V2 = mkV2 "置く" "を" Gr1 ; -- "oku"
|
put_V2 = mkV2 "置く" "を" Gr1 ; -- "oku"
|
||||||
queen_N = mkN "女王" Anim "人" False "女王たち" ; -- "joou"
|
queen_N = mkN "女王" Anim "人" False "女王たち" ; -- "joou"
|
||||||
question_N = mkN "質問" Inanim "題" True ; -- "shitsumon" "dai"
|
question_N = mkN "質問" Inanim ; -- "shitsumon"
|
||||||
radio_N = mkN "ラジオ" Inanim ; -- "rajio"
|
radio_N = mkN "ラジオ" Inanim ; -- "rajio"
|
||||||
rain_N = mkN "雨" Inanim ; -- "ame"
|
rain_N = mkN "雨" Inanim ; -- "ame"
|
||||||
rain_V0 = mkRain ;
|
rain_V0 = mkRain ;
|
||||||
@@ -235,12 +235,12 @@ lin
|
|||||||
religion_N = mkN "宗教" Inanim ; -- "shuukyou"
|
religion_N = mkN "宗教" Inanim ; -- "shuukyou"
|
||||||
restaurant_N = mkN "レストラン" Inanim ; -- "resutoran"
|
restaurant_N = mkN "レストラン" Inanim ; -- "resutoran"
|
||||||
right_Ord = mkA "右の" ; -- "migino"
|
right_Ord = mkA "右の" ; -- "migino"
|
||||||
river_N = mkN "川" Inanim "本" False ; -- "kawa" "hon"
|
river_N = mkN "川" Inanim "本" ; -- "kawa" "hon"
|
||||||
road_N = mkN "道路" Inanim "本" False ; -- "douro" "hon"
|
road_N = mkN "道路" Inanim "本" ; -- "douro" "hon"
|
||||||
rock_N = mkN "岩" Inanim ; -- "iwa"
|
rock_N = mkN "岩" Inanim ; -- "iwa"
|
||||||
roof_N = mkN "屋根" Inanim ; -- "yane"
|
roof_N = mkN "屋根" Inanim ; -- "yane"
|
||||||
root_N = mkN "根" Inanim ; -- "ne"
|
root_N = mkN "根" Inanim ; -- "ne"
|
||||||
rope_N = mkN "縄" Inanim "本" False ; -- "nawa"
|
rope_N = mkN "縄" Inanim "本" ; -- "nawa"
|
||||||
rotten_A = mkA "腐っている" "腐った" ; -- "kusatteiru"
|
rotten_A = mkA "腐っている" "腐った" ; -- "kusatteiru"
|
||||||
round_A = mkA "丸い" ; -- "marui"
|
round_A = mkA "丸い" ; -- "marui"
|
||||||
rubber_N = mkN "ゴム" Inanim ; -- "gomu" - material
|
rubber_N = mkN "ゴム" Inanim ; -- "gomu" - material
|
||||||
@@ -261,11 +261,11 @@ lin
|
|||||||
send_V3 = mkV3 "送る" "に" "を" Gr1 ; -- "okuru"
|
send_V3 = mkV3 "送る" "に" "を" Gr1 ; -- "okuru"
|
||||||
sew_V = mkV "縫う" Gr1 ; -- "nuu"
|
sew_V = mkV "縫う" Gr1 ; -- "nuu"
|
||||||
sharp_A = mkA "鋭い" ; -- "surudoi"
|
sharp_A = mkA "鋭い" ; -- "surudoi"
|
||||||
sheep_N = mkN "羊" Anim "頭" False ; -- "hitsuji" "tou"
|
sheep_N = mkN "羊" Anim "頭" ; -- "hitsuji" "tou"
|
||||||
ship_N = mkN "船" Inanim "杯" False ; -- "fune" "hai"
|
ship_N = mkN "船" Inanim "隻" ; -- "fune" "seki"
|
||||||
shirt_N = mkN "シャツ" Inanim ; -- "shatsu"
|
shirt_N = mkN "シャツ" Inanim "枚" False ; -- "shatsu" "mai"
|
||||||
shoe_N = mkN "靴" Inanim ; -- "kutsu"
|
shoe_N = mkN "靴" Inanim ; -- "kutsu"
|
||||||
shop_N = mkN "店" Inanim "店" True ; -- "mise" "ten"
|
shop_N = mkN "店" Inanim ; -- "mise"
|
||||||
short_A = mkA "短い" ; -- "mijikai"
|
short_A = mkA "短い" ; -- "mijikai"
|
||||||
silver_N = mkN "銀" Inanim ; -- "gin"
|
silver_N = mkN "銀" Inanim ; -- "gin"
|
||||||
sing_V = mkV "歌う" Gr1 ; -- "utau"
|
sing_V = mkV "歌う" Gr1 ; -- "utau"
|
||||||
@@ -278,10 +278,10 @@ lin
|
|||||||
smell_V = mkV "匂う" Gr1 ; -- "niou"
|
smell_V = mkV "匂う" Gr1 ; -- "niou"
|
||||||
smoke_N = mkN "煙" Inanim ; -- "kemuri"
|
smoke_N = mkN "煙" Inanim ; -- "kemuri"
|
||||||
smooth_A = mkA "平滑な" ; -- "heikatsuna"
|
smooth_A = mkA "平滑な" ; -- "heikatsuna"
|
||||||
snake_N = mkN "蛇" Anim "匹" False ; -- "hebi" "hiki"
|
snake_N = mkN "蛇" Anim "匹" ; -- "hebi" "hiki"
|
||||||
snow_N = mkN "雪" Inanim ; -- "yuki"
|
snow_N = mkN "雪" Inanim ; -- "yuki"
|
||||||
sock_N = mkN "靴下" Inanim ; -- "kutsushita"
|
sock_N = mkN "靴下" Inanim ; -- "kutsushita"
|
||||||
song_N = mkN "歌" Inanim "曲" False ; -- "uta" "kyoku"
|
song_N = mkN "曲" Inanim True ; -- "kyoku"
|
||||||
speak_V2 = mkV2 "話す" "を" Gr1 ; -- "hanasu"
|
speak_V2 = mkV2 "話す" "を" Gr1 ; -- "hanasu"
|
||||||
spit_V = mkV "唾する" Suru ; -- "tsubakisuru"
|
spit_V = mkV "唾する" Suru ; -- "tsubakisuru"
|
||||||
split_V2 = mkV2 "分かつ" "を" Gr1 ; -- "wakatsu"
|
split_V2 = mkV2 "分かつ" "を" Gr1 ; -- "wakatsu"
|
||||||
@@ -290,7 +290,7 @@ lin
|
|||||||
stand_V = mkV "立つ" Gr1 ; -- "tatsu"
|
stand_V = mkV "立つ" Gr1 ; -- "tatsu"
|
||||||
star_N = mkN "星" Inanim ; -- "hoshi"
|
star_N = mkN "星" Inanim ; -- "hoshi"
|
||||||
steel_N = mkN "鋼" Inanim ; -- "hagane"
|
steel_N = mkN "鋼" Inanim ; -- "hagane"
|
||||||
stick_N = mkN "棒" Inanim "本" False ; -- "bou" "hon"
|
stick_N = mkN "棒" Inanim "本" ; -- "bou" "hon"
|
||||||
stone_N = mkN "石" Inanim ; -- "ishi"
|
stone_N = mkN "石" Inanim ; -- "ishi"
|
||||||
stop_V = mkV "止まる" Gr1 ; -- "tomaru"
|
stop_V = mkV "止まる" Gr1 ; -- "tomaru"
|
||||||
stove_N = mkN "ストーブ" Inanim ; -- "sutobu"
|
stove_N = mkN "ストーブ" Inanim ; -- "sutobu"
|
||||||
@@ -303,7 +303,7 @@ lin
|
|||||||
swim_V = mkV "泳ぐ" Gr1 ; -- "oyogu"
|
swim_V = mkV "泳ぐ" Gr1 ; -- "oyogu"
|
||||||
switch8off_V2 = mkV2 "スイッチを切る" "の" Gr1 ; -- "suitchiokiru"
|
switch8off_V2 = mkV2 "スイッチを切る" "の" Gr1 ; -- "suitchiokiru"
|
||||||
switch8on_V2 = mkV2 "スイッチを入れる" "の" Gr2 ; -- "suitchioireru"
|
switch8on_V2 = mkV2 "スイッチを入れる" "の" Gr2 ; -- "suitchioireru"
|
||||||
table_N = mkN "テーブル" Inanim "脚" False ; -- "teburu" "kyaku"
|
table_N = mkN "テーブル" Inanim ; -- "teburu"
|
||||||
tail_N = mkN "尾" Inanim ; -- "o"
|
tail_N = mkN "尾" Inanim ; -- "o"
|
||||||
talk_V3 = mkV3 "話す" "と" "について" Gr1 ; -- "hanasu"
|
talk_V3 = mkV3 "話す" "と" "について" Gr1 ; -- "hanasu"
|
||||||
teacher_N = mkN "先生" Anim "人" False "先生たち" ; -- "sensei"
|
teacher_N = mkN "先生" Anim "人" False "先生たち" ; -- "sensei"
|
||||||
@@ -317,15 +317,15 @@ lin
|
|||||||
today_Adv = ResJpn.mkAdv "今日" ; -- "kyou" ;
|
today_Adv = ResJpn.mkAdv "今日" ; -- "kyou" ;
|
||||||
tongue_N = mkN "舌" Inanim ; -- "shita"
|
tongue_N = mkN "舌" Inanim ; -- "shita"
|
||||||
tooth_N = mkN "歯" Inanim ; -- "ha"
|
tooth_N = mkN "歯" Inanim ; -- "ha"
|
||||||
train_N = mkN "電車" Inanim "列車" True ; -- "densha" "ressha"
|
train_N = mkN "列車" Inanim "本" ; -- "ressha" "hon"
|
||||||
travel_V = mkV "旅行する" Suru ; -- "ryokousuru"
|
travel_V = mkV "旅行する" Suru ; -- "ryokousuru"
|
||||||
tree_N = mkN "木" Inanim "樹" True ; -- "ki" "ju"
|
tree_N = mkN "木" Inanim "本" ; -- "ki" "hon"
|
||||||
turn_V = mkV "回る" Gr1 ; -- "mawaru"
|
turn_V = mkV "回る" Gr1 ; -- "mawaru"
|
||||||
ugly_A = mkA "醜い" ; -- "mnikui"
|
ugly_A = mkA "醜い" ; -- "mnikui"
|
||||||
uncertain_A = mkA "危なっかしい" ; -- "abunakkashii"
|
uncertain_A = mkA "危なっかしい" ; -- "abunakkashii"
|
||||||
understand_V2 = mkV2 "理解する" "を" Suru ; -- "rikaisuru"
|
understand_V2 = mkV2 "理解する" "を" Suru ; -- "rikaisuru"
|
||||||
university_N = mkN "大学" Inanim ; -- "daigaku"
|
university_N = mkN "大学" Inanim ; -- "daigaku"
|
||||||
village_N = mkN "村" Inanim "村" True ; -- "mura" "son"
|
village_N = mkN "村" Inanim ; -- "mura"
|
||||||
vomit_V = mkV "吐く" Gr1 ; -- "haku"
|
vomit_V = mkV "吐く" Gr1 ; -- "haku"
|
||||||
wait_V2 = mkV2 "待つ" "を" Gr1 ; -- "matsu"
|
wait_V2 = mkV2 "待つ" "を" Gr1 ; -- "matsu"
|
||||||
walk_V = mkV "歩く" Gr1 ; -- "aruku"
|
walk_V = mkV "歩く" Gr1 ; -- "aruku"
|
||||||
@@ -347,9 +347,9 @@ lin
|
|||||||
woman_N = mkN "女" Anim "人" False "女たち" ; -- "onna"
|
woman_N = mkN "女" Anim "人" False "女たち" ; -- "onna"
|
||||||
wonder_VQ = mkV2 "質問する" "を" Suru ; -- "shitsumonsuru"
|
wonder_VQ = mkV2 "質問する" "を" Suru ; -- "shitsumonsuru"
|
||||||
wood_N = mkN "木材" Inanim ; -- "mokuzai"
|
wood_N = mkN "木材" Inanim ; -- "mokuzai"
|
||||||
worm_N = mkN "ワーム" Anim "匹" False ; -- "waamu" "hiki"
|
worm_N = mkN "ワーム" Anim "匹" ; -- "waamu" "hiki"
|
||||||
write_V2 = mkV2 "書く" "を" Gr1 ; -- "kaku"
|
write_V2 = mkV2 "書く" "を" Gr1 ; -- "kaku"
|
||||||
year_N = mkN "年" Inanim "年" True ; -- "toshi" "nen"
|
year_N = mkN "年" Inanim True ; -- "toshi" "nen"
|
||||||
yellow_A = mkA "黄色の" ; -- "kiirono"
|
yellow_A = mkA "黄色の" ; -- "kiirono"
|
||||||
young_A = mkA "若い" ; -- "wakai"
|
young_A = mkA "若い" ; -- "wakai"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,37 +3,44 @@ resource ParadigmsJpn = CatJpn **
|
|||||||
|
|
||||||
flags coding = utf8 ;
|
flags coding = utf8 ;
|
||||||
|
|
||||||
param
|
|
||||||
|
|
||||||
VerbGroupP = Gr1P | Gr2P | SuruP | KuruP ;
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
|
VerbGroup : Type ; -- Parameter for mkV*
|
||||||
|
gr1 : VerbGroup ; -- Basic form ends in -u, consonant stem.
|
||||||
|
gr2 : VerbGroup ; -- Basic form ends in -iru/-eru, vowel stem.
|
||||||
|
suru : VerbGroup ; -- Irregular: kuru
|
||||||
|
kuru : VerbGroup ; -- Irregular: suru
|
||||||
|
|
||||||
|
Animacy : Type ; -- Parameter for mkN*
|
||||||
|
animate : Animacy ;
|
||||||
|
inanimate : Animacy ;
|
||||||
|
|
||||||
mkN = overload {
|
mkN = overload {
|
||||||
mkN : (man : Str) -> N ---- AR 15/11/2014
|
mkN : (man : Str) -> N -- Inanimate noun. Counter is つ and doesn't replace the noun.
|
||||||
= \n -> lin N (regNoun n Inanim "つ" False True) ;
|
= \n -> lin N (regNoun n Inanim "つ" False True) ; ---- AR 15/11/2014
|
||||||
mkN : (man : Str) -> (anim : Animateness) -> N
|
mkN : (man : Str) -> (anim : Animacy) -> N -- Animacy given as argument. Counter is つ and doesn't replace the noun.
|
||||||
= \n,a -> lin N (regNoun n a "つ" False True) ;
|
= \n,a -> lin N (regNoun n a "つ" False True) ;
|
||||||
mkN : (kane,okane : Str) -> (anim : Animateness) -> N
|
mkN : (kane,okane : Str) -> (anim : Animacy) -> N -- Style variation (plain, respectful) and animacy given. Counter is つ and doesn't replace the noun.
|
||||||
= \kane,okane,a -> lin N (styleNoun kane okane a "つ" False True) ;
|
= \kane,okane,a -> lin N (styleNoun kane okane a "つ" False True) ;
|
||||||
mkN : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) -> N
|
mkN : (man : Str) -> (anim : Animacy) -> (counter : Str) -> (counterReplace : Bool) -> N -- No style variation. Arguments are animacy, counter and whether counter replaces the noun.
|
||||||
= \n,a,c,b -> lin N (regNoun n a c b False) ;
|
= \n,a,c,b -> lin N (regNoun n a c b False) ;
|
||||||
mkN : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) ->
|
mkN : (man : Str) -> (anim : Animacy) -> (counterReplace : Bool) -> N -- No style variation. Arguments are animacy and whether counter replaces the noun (here the counter and the noun coincide, e.g. 'day' 日, 'two days' 二日, not 二日の日).
|
||||||
(men : Str) -> N = \n,a,c,b,pl -> lin N (numberNoun n a c b pl False) ;
|
= \n,a,b -> lin N (regNoun n a n b False) ; -- Liza 16/02/2020
|
||||||
mkN : (kane,okane : Str) -> (anim : Animateness) -> (counter : Str) ->
|
mkN : (man : Str) -> (anim : Animacy) -> (counter : Str) -> N -- No style variation. Arguments are animacy and counter, which does not replace the noun.
|
||||||
(counterReplace : Bool) -> N
|
= \n,a,c -> lin N (regNoun n a c False False) ; -- Liza 16/02/2020
|
||||||
= \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b False) ;
|
mkN : (man : Str) -> (anim : Animacy) -> (counter : Str) -> (counterReplace : Bool) -> (men : Str) -> N -- Like previous, but unpredictable plural.
|
||||||
mkN : (tsuma,okusan : Str) -> (anim : Animateness) -> (counter : Str) ->
|
= \n,a,c,b,pl -> lin N (numberNoun n a c b pl False) ;
|
||||||
(counterReplace : Bool) -> (tsumatachi : Str) -> N
|
mkN : (kane,okane : Str) -> (anim : Animacy) -> (counter : Str) -> (counterReplace : Bool) -> N -- Plain form, respectful form, animacy, counter and whether counter replaces the noun.
|
||||||
= \tsuma,okusan,a,c,b,tsumatachi ->
|
= \kane,okane,a,c,b -> lin N (styleNoun kane okane a c b False) ;
|
||||||
|
mkN : (tsuma,okusan : Str) -> (anim : Animacy) -> (counter : Str) -> (counterReplace : Bool) -> (tsumatachi : Str) -> N -- Worst case paradigm: plain form, respectful form, animacy, counter, whether counter replaces the noun, and plural form.
|
||||||
|
= \tsuma,okusan,a,c,b,tsumatachi ->
|
||||||
lin N (mkNoun tsuma okusan tsumatachi tsumatachi a c b False)
|
lin N (mkNoun tsuma okusan tsumatachi tsumatachi a c b False)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkN2 : (man : Str) -> (anim : Animateness) -> (counter : Str) -> (counterReplace : Bool) ->
|
mkN2 : (man : Str) -> (anim : Animacy) -> (counter : Str) -> (counterReplace : Bool) -> (men : Str) -> (prep : Str) -> N2 = \n,a,c,b,pl,pr ->
|
||||||
(men : Str) -> (prep : Str) -> N2 = \n,a,c,b,pl,pr ->
|
|
||||||
lin N2 (numberNoun n a c b pl False) ** {prep = pr ; object = \\st => []} ;
|
lin N2 (numberNoun n a c b pl False) ** {prep = pr ; object = \\st => []} ;
|
||||||
|
|
||||||
mkN3 : (distance : Str) -> (prep1: Str) -> (prep2: Str) -> (anim : Animateness) -> N3
|
mkN3 : (distance : Str) -> (prep1: Str) -> (prep2: Str) -> (anim : Animacy) -> N3
|
||||||
= \n,p1,p2,a -> lin N3 (regNoun n a "つ" False True) ** {prep1 = p1; prep2 = p2} ;
|
= \n,p1,p2,a -> lin N3 (regNoun n a "つ" False True) ** {prep1 = p1; prep2 = p2} ;
|
||||||
|
|
||||||
mkPN = overload {
|
mkPN = overload {
|
||||||
@@ -44,63 +51,73 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkPron = overload {
|
mkPron = overload {
|
||||||
mkPron : (kare : Str) -> (Pron1Sg : Bool) -> (anim : Animateness) -> Pron
|
mkPron : (kare : Str) -> (Pron1Sg : Bool) -> (anim : Animacy) -> Pron
|
||||||
= \kare,b,a -> lin Pron (regPron kare b a) ;
|
= \kare,b,a -> lin Pron (regPron kare b a) ;
|
||||||
mkPron : (boku,watashi : Str) -> (Pron1Sg : Bool) -> (anim : Animateness) -> Pron
|
mkPron : (boku,watashi : Str) -> (Pron1Sg : Bool) -> (anim : Animacy) -> Pron
|
||||||
= \boku,watashi,b,a -> lin Pron (stylePron boku watashi b a)
|
= \boku,watashi,b,a -> lin Pron (stylePron boku watashi b a)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (ookina : Str) -> A = \a -> lin A (regAdj a) ;
|
mkA : (ookina : Str) -> A -- One form for both predicative and attribute
|
||||||
mkA : (kekkonshiteiru,kikonno : Str) -> A = \pred,attr -> lin A (VerbalA pred attr)
|
= \a -> lin A (regAdj a) ;
|
||||||
|
mkA : (kekkonshiteiru,kikonno : Str) -> A -- Verbal adjective, arguments are predicative and attributive
|
||||||
|
= \pred,attr -> lin A (VerbalA pred attr)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkA2 = overload {
|
mkA2 = overload {
|
||||||
mkA2 : (yasui : Str) -> (prep : Str) -> A2 = \a,p -> lin A2 (regAdj a) ** {prep = p} ;
|
mkA2 : (yasui : Str) -> (prep : Str) -> A2 -- 2-place adjective. Arguments: adjective (same for predicative and attributive) and object marker.
|
||||||
mkA2 : (pred : Str) -> (attr : Str) -> (prep : Str) -> A2 =
|
= \a,p -> lin A2 (regAdj a) ** {prep = p} ;
|
||||||
\pred,attr,pr -> lin A2 (VerbalA pred attr) ** {prep = pr}
|
mkA2 : (pred : Str) -> (attr : Str) -> (prep : Str) -> A2 -- Predicative, attributive and object marker.
|
||||||
|
= \pred,attr,pr -> lin A2 (VerbalA pred attr) ** {prep = pr}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV = overload {
|
mkV = overload {
|
||||||
mkV : (yomu : Str) -> V
|
mkV : (yomu : Str) -> V -- Default: group 1 verb
|
||||||
= \yomu -> lin V (mkVerb yomu Gr1) ; ---- AR 15/11/2014
|
= \yomu -> lin V (mkVerb yomu Gr1) ; ---- AR 15/11/2014
|
||||||
mkV : (yomu : Str) -> (group : ResJpn.VerbGroup) -> V
|
mkV : (yomu : Str) -> (group : VerbGroup) -> V
|
||||||
= \yomu,gr -> lin V (mkVerb yomu gr) ;
|
= \yomu,gr -> lin V (mkVerb yomu gr) ; -- Base form and verb group given
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV2 = overload {
|
mkV2 = overload {
|
||||||
mkV2 : (yomu : Str) -> V2 ---- AR 15/11/2014
|
mkV2 : (yomu : Str) -> V2 -- Group 1 verb, を as object marker
|
||||||
= \yomu -> lin V2 (mkVerb2 yomu "を" Gr1) ;
|
= \yomu -> lin V2 (mkVerb2 yomu "を" Gr1) ; ---- AR 15/11/2014
|
||||||
mkV2 : (yomu, prep : Str) -> (group : ResJpn.VerbGroup) -> V2
|
mkV2 : (yomu, prep : Str) -> (group : VerbGroup) -> V2 -- Base form, object marker and verb group given
|
||||||
= \yomu,p,gr -> lin V2 (mkVerb2 yomu p gr) ;
|
= \yomu,p,gr -> lin V2 (mkVerb2 yomu p gr) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : (yomu : Str) -> V3
|
mkV3 : (yomu : Str) -> V3 -- Group 1 verb, に and を as object markers
|
||||||
= \yomu -> lin V3 (mkVerb3 yomu "に" "を" Gr1) ;
|
= \yomu -> lin V3 (mkVerb3 yomu "に" "を" Gr1) ;
|
||||||
mkV3 : (uru, p1, p2 : Str) -> (group : ResJpn.VerbGroup) -> V3 = \uru,p1,p2,gr ->
|
mkV3 : (uru, p1, p2 : Str) -> (group : VerbGroup) -> V3 -- Base form, object markers and verb group given
|
||||||
lin V3 (mkVerb3 uru p1 p2 gr) ;
|
= \uru,p1,p2,gr -> lin V3 (mkVerb3 uru p1 p2 gr) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkVS : (yomu : Str) -> VS = \yomu -> lin VS (mkVerb2 yomu "ことを" Gr1) ;
|
mkVS : (yomu : Str) -> VS
|
||||||
|
= \yomu -> lin VS (mkVerb2 yomu "ことを" Gr1) ;
|
||||||
|
|
||||||
mkVV : (yomu : Str) -> VV = \yomu -> lin VV (mkVerbV yomu Gr1) ;
|
mkVV : (yomu : Str) -> VV
|
||||||
|
= \yomu -> lin VV (mkVerbV yomu Gr1) ;
|
||||||
|
|
||||||
mkV2V : (yomu : Str) -> V2V = \yomu -> lin V2V (mkVerb yomu Gr1) ;
|
mkV2V : (yomu : Str) -> V2V
|
||||||
|
= \yomu -> lin V2V (mkVerb yomu Gr1) ;
|
||||||
|
|
||||||
mkV2S : (yomu : Str) -> V2S = \yomu -> lin V2S (mkVerb yomu Gr1) ;
|
mkV2S : (yomu : Str) -> V2S
|
||||||
|
= \yomu -> lin V2S (mkVerb yomu Gr1) ;
|
||||||
|
|
||||||
mkVQ : (yomu : Str) -> VQ = \yomu -> lin VQ (mkVerb2 yomu "を" Gr1) ;
|
mkVQ : (yomu : Str) -> VQ
|
||||||
|
= \yomu -> lin VQ (mkVerb2 yomu "を" Gr1) ;
|
||||||
|
|
||||||
mkVA : (yomu : Str) -> VA = \yomu -> lin VA (mkVerb yomu Gr1) ;
|
mkVA : (yomu : Str) -> VA
|
||||||
|
= \yomu -> lin VA (mkVerb yomu Gr1) ;
|
||||||
|
|
||||||
mkV2A : (yomu : Str) -> V2A = \yomu -> lin V2A (mkVerb yomu Gr1) ;
|
mkV2A : (yomu : Str) -> V2A
|
||||||
|
= \yomu -> lin V2A (mkVerb yomu Gr1) ;
|
||||||
|
|
||||||
mkAdv : Str -> Adv ---- AR 15/11/2014
|
mkAdv : Str -> Adv
|
||||||
= \s -> lin Adv (ResJpn.mkAdv s) ;
|
= \s -> lin Adv (ResJpn.mkAdv s) ; ---- AR 15/11/2014
|
||||||
|
|
||||||
mkPrep : Str -> Prep ---- AR 15/11/2014
|
mkPrep : Str -> Prep
|
||||||
= \s -> lin Prep (ResJpn.mkPrep s) ;
|
= \s -> lin Prep (ResJpn.mkPrep s) ; ---- AR 15/11/2014
|
||||||
|
|
||||||
mkDet : Str -> Det = \d -> lin Det (ResJpn.mkDet d d ResJpn.Sg) ;
|
mkDet : Str -> Det = \d -> lin Det (ResJpn.mkDet d d ResJpn.Sg) ;
|
||||||
|
|
||||||
@@ -116,4 +133,17 @@ oper
|
|||||||
te_neg = \\sp => "行かないで" ;
|
te_neg = \\sp => "行かないで" ;
|
||||||
ba_neg = \\sp => "行かなければ" ;
|
ba_neg = \\sp => "行かなければ" ;
|
||||||
sense = Abil} ;
|
sense = Abil} ;
|
||||||
|
|
||||||
|
--.
|
||||||
|
-- Hidden definitions
|
||||||
|
|
||||||
|
Animacy : Type = ResJpn.Animateness ;
|
||||||
|
animate : Animacy = ResJpn.Anim ;
|
||||||
|
inanimate : Animacy = ResJpn.Inanim ;
|
||||||
|
|
||||||
|
VerbGroup : Type = ResJpn.VerbGroup ;
|
||||||
|
gr1 : VerbGroup = Gr1 ;
|
||||||
|
gr2 : VerbGroup = Gr2 ;
|
||||||
|
suru : VerbGroup = Suru ;
|
||||||
|
kuru : VerbGroup = Kuru ;
|
||||||
}
|
}
|
||||||
|
|||||||
142
src/morphodict/MkMorphodict.hs
Normal file
142
src/morphodict/MkMorphodict.hs
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
module Main where
|
||||||
|
|
||||||
|
import PGF
|
||||||
|
|
||||||
|
import qualified Data.Map as M
|
||||||
|
import Data.Char
|
||||||
|
import Data.List
|
||||||
|
import System.Environment (getArgs)
|
||||||
|
|
||||||
|
-- AR 2020-02-28
|
||||||
|
|
||||||
|
-- making a word list purely morphological, i.e.
|
||||||
|
-- - functions are 1-to-1 with lemgrams, i.e.
|
||||||
|
-- - no sense distinctions
|
||||||
|
-- - no subcategorizations
|
||||||
|
-- - no variants
|
||||||
|
-- - functionname = baseform_category, with exceptions
|
||||||
|
-- - variant inflection tables: lie_1_V, lie_2_V
|
||||||
|
-- - words that have non-ident characters: 'bird\'s-eye_A'
|
||||||
|
-- - words that start with non-letters: W_'tween_Adv
|
||||||
|
|
||||||
|
-- example:
|
||||||
|
-- gf -make ../english/DictEng.gf
|
||||||
|
-- runghc MkMorphodict.hs DictEngAbs.pgf MorphoDictEng
|
||||||
|
-- 64923 -> 56599 functions
|
||||||
|
|
||||||
|
usage = "MkMorphodict <pgf> <outfile>"
|
||||||
|
|
||||||
|
main = do
|
||||||
|
pgfile:outfile:_ <- getArgs
|
||||||
|
pgf <- readPGF pgfile
|
||||||
|
config <- readFile (outfile ++ ".config") >>= return . mkConfig
|
||||||
|
|
||||||
|
let (absrules,cncrules) = mkMorphoDict (MDEnv pgf config (head (languages pgf)))
|
||||||
|
|
||||||
|
absheader <- readFile (outfile ++ "Abs.header")
|
||||||
|
cncheader <- readFile (outfile ++ ".header")
|
||||||
|
|
||||||
|
writeFile (outfile ++ "Abs.gf") absheader
|
||||||
|
appendFile (outfile ++ "Abs.gf") $ unlines absrules
|
||||||
|
appendFile (outfile ++ "Abs.gf") "}"
|
||||||
|
|
||||||
|
writeFile (outfile ++ ".gf") cncheader
|
||||||
|
appendFile (outfile ++ ".gf") $ unlines cncrules
|
||||||
|
appendFile (outfile ++ ".gf") "}"
|
||||||
|
|
||||||
|
|
||||||
|
type Cat = CId
|
||||||
|
type Oper = String
|
||||||
|
type Config = M.Map Cat (Cat,Oper,[Int])
|
||||||
|
|
||||||
|
data MDEnv = MDEnv {
|
||||||
|
pgf :: PGF,
|
||||||
|
config :: Config,
|
||||||
|
lang :: Language
|
||||||
|
}
|
||||||
|
|
||||||
|
mkConfig :: String -> Config
|
||||||
|
mkConfig ls = M.fromList [(c,i) | Left (c,i) <- map mkOne (lines ls)]
|
||||||
|
where
|
||||||
|
mkOne s = case words s of
|
||||||
|
"--":_ -> Right s
|
||||||
|
cat:":":tcat:oper:ints -> Left (mkCId cat,(mkCId tcat,oper,map read ints))
|
||||||
|
_ -> Right s
|
||||||
|
|
||||||
|
mkMorphoDict :: MDEnv -> ([String],[String])
|
||||||
|
mkMorphoDict env =
|
||||||
|
unzip $
|
||||||
|
map splitRule $
|
||||||
|
findCompounds $
|
||||||
|
nameFunctions $
|
||||||
|
mergeRules $
|
||||||
|
concatMap findRules cats
|
||||||
|
where
|
||||||
|
splitRule (fun,(cat,lin)) = (unwords ["fun",fun,":",showCId cat,";"], unwords ["lin",fun,"=", unwords lin,";"])
|
||||||
|
|
||||||
|
cats = nub [c | (c,(_,_,_)) <- M.assocs (config env)]
|
||||||
|
|
||||||
|
findRules cat = [
|
||||||
|
([snd (lin !! head ints), showCId c], (c, op : appSig ints (map snd lin))) | --- head ints is the base form in smart paradigms
|
||||||
|
f <- functionsByCat (pgf env) cat,
|
||||||
|
lin <- tabularLinearizes (pgf env) (lang env) (mkApp f []), -- [[(String, String)]]
|
||||||
|
Just (c,op,ints) <- [M.lookup cat (config env)]
|
||||||
|
]
|
||||||
|
|
||||||
|
appSig ints forms = [forms !! i | i <- ints]
|
||||||
|
|
||||||
|
mergeRules = map head . groupBy (\x y -> snd x == snd y) . sortOn snd
|
||||||
|
|
||||||
|
nameFunctions = expandNames . sortOn fst
|
||||||
|
|
||||||
|
expandNames fls = case fls of
|
||||||
|
(f,l):fls2 -> case span ((==f) . fst) fls2 of
|
||||||
|
([],_) -> (mkFun f,l) : expandNames fls2
|
||||||
|
(fls1,fls3) -> renames ((f,l):fls1) ++ expandNames fls3
|
||||||
|
_ -> []
|
||||||
|
|
||||||
|
renames fls = [(mkFun (init f ++ [show i,last f]),l) | (i,(f,l)) <- zip [1..] fls]
|
||||||
|
|
||||||
|
findCompounds = getCompounds . sortOn cat_orthrevforms
|
||||||
|
|
||||||
|
cat_orthrevforms (_,(cat,_:forms)) = (cat,[map (!!i) fss | let fss = map reverse forms, i <- [0..minimum (map length fss) - 1]])
|
||||||
|
|
||||||
|
cat_revforms (_,(cat,_:forms)) = (cat,map reverse forms)
|
||||||
|
revstem = head . snd . cat_revforms
|
||||||
|
wforms (_,(_,_:forms)) = forms
|
||||||
|
|
||||||
|
getCompounds fls = case fls of
|
||||||
|
fl : fls1 | length (revstem fl) < 2 -> markWith fl [] : getCompounds fls1
|
||||||
|
fl : fls2 -> case span (\x -> and [isPrefixOf (reverse w) (reverse w1) | (w,w1) <- zip (wforms fl) (wforms x)]) fls2 of
|
||||||
|
([],_:_) -> markWith fl [] : getCompounds fls2
|
||||||
|
(fls1,fls3) -> markWith fl [] : map (markCompound fl) fls1 ++ getCompounds fls3
|
||||||
|
_ -> []
|
||||||
|
|
||||||
|
markCompound fl fl1 =
|
||||||
|
case and [isPrefixWord (reverse w) (reverse w1) | (w,w1) <- zip (wforms fl) (wforms fl1)] of
|
||||||
|
True -> markWith fl1 [";","--","compound",(fst fl)]
|
||||||
|
False -> markWith fl1 [";","--","notcompound",(fst fl)]
|
||||||
|
|
||||||
|
markWith (f,(c,op:ws)) xs = (f,(c,op : map quote ws ++ xs))
|
||||||
|
|
||||||
|
isPrefixWord x xy =
|
||||||
|
length suff > 1 &&
|
||||||
|
any (\c -> elem c "-0123456789aeiouyåäö") suff &&
|
||||||
|
isPrefixOf x xy
|
||||||
|
where
|
||||||
|
suff = drop (length x) xy
|
||||||
|
|
||||||
|
mkFun = quoteIf . concat . intersperse "_"
|
||||||
|
quoteIf s = case s of
|
||||||
|
_ | any (\c -> not (isAlphaNum c || elem c "_'")) s -> "'" ++ unSgQuote s ++ "'"
|
||||||
|
c:_ | not (isAlpha c) -> "W_" ++ s
|
||||||
|
_ -> s
|
||||||
|
where
|
||||||
|
unSgQuote s = case s of
|
||||||
|
'\'':cs -> "\\\'" ++ unSgQuote cs
|
||||||
|
c:cs -> c : unSgQuote cs
|
||||||
|
_ -> s
|
||||||
|
|
||||||
|
|
||||||
|
quote s = "\"" ++ s ++ "\""
|
||||||
|
|
||||||
8
src/morphodict/MorphoDictEng.config
Normal file
8
src/morphodict/MorphoDictEng.config
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
N : N mkN 0 2
|
||||||
|
A : A mkA 0 2 4 6
|
||||||
|
V : V mkV 0 4 2
|
||||||
|
V2 : V mkV 0 4 2
|
||||||
|
Adv : Adv mkAdv 0
|
||||||
|
Prep : Prep mkPrep 0
|
||||||
|
|
||||||
|
|
||||||
56607
src/morphodict/MorphoDictEng.gf
Normal file
56607
src/morphodict/MorphoDictEng.gf
Normal file
File diff suppressed because it is too large
Load Diff
7
src/morphodict/MorphoDictEng.header
Normal file
7
src/morphodict/MorphoDictEng.header
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
concrete MorphoDictEng of MorphoDictEngAbs =
|
||||||
|
CatEng [N,A,V,Adv,Prep] **
|
||||||
|
open
|
||||||
|
ParadigmsEng
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
56604
src/morphodict/MorphoDictEngAbs.gf
Normal file
56604
src/morphodict/MorphoDictEngAbs.gf
Normal file
File diff suppressed because it is too large
Load Diff
4
src/morphodict/MorphoDictEngAbs.header
Normal file
4
src/morphodict/MorphoDictEngAbs.header
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
abstract MorphoDictEngAbs =
|
||||||
|
Cat [N,A,V,Adv,Prep] **
|
||||||
|
{
|
||||||
|
|
||||||
8
src/morphodict/MorphoDictSwe.config
Normal file
8
src/morphodict/MorphoDictSwe.config
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
N : N mkN 0 2 4 6
|
||||||
|
A : A mkA 0 2 4 10 12
|
||||||
|
V : V mkV 6 0 4 2 8 10
|
||||||
|
V2 : V mkV 6 0 4 2 8 10
|
||||||
|
Adv : Adv mkAdv 0
|
||||||
|
Prep : Prep mkPrep 0
|
||||||
|
PN : PN mkPN 0
|
||||||
|
|
||||||
8
src/morphodict/MorphoDictSwe.header
Normal file
8
src/morphodict/MorphoDictSwe.header
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
concrete MorphoDictSwe of MorphoDictSweAbs =
|
||||||
|
CatSwe [N,A,V,Adv,Prep,PN] **
|
||||||
|
open
|
||||||
|
ParadigmsSwe
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
4
src/morphodict/MorphoDictSweAbs.header
Normal file
4
src/morphodict/MorphoDictSweAbs.header
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
abstract MorphoDictSweAbs =
|
||||||
|
Cat [N,A,V,Adv,Prep,PN] **
|
||||||
|
{
|
||||||
|
|
||||||
38
src/morphodict/README
Normal file
38
src/morphodict/README
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
MkMorphoDict: Extracting a minimal morphological dictionary from an existing GF dictionary.
|
||||||
|
|
||||||
|
Aarne Ranta 2020-03-02
|
||||||
|
|
||||||
|
principles:
|
||||||
|
|
||||||
|
There should be a single source for each lemgram (i.e. inflection table of a word)
|
||||||
|
Functions names should be easy to guess: baseform_Category (but avoiding accidental errors if this is not a unique key)
|
||||||
|
|
||||||
|
Hence,
|
||||||
|
|
||||||
|
Functions are 1-to-1 with lemgrams, i.e. inflection tables, thus
|
||||||
|
- no sense distinctions
|
||||||
|
- no subcategorizations
|
||||||
|
- no variants
|
||||||
|
|
||||||
|
Functionname = baseform_category, with exceptions
|
||||||
|
- same baseform_Category, different inflection tables: lie_1_V, lie_2_V
|
||||||
|
- words that have non-ident characters: 'bird\'s-eye_A'
|
||||||
|
- words that start with non-letters: W_'tween_Adv
|
||||||
|
|
||||||
|
Example run, English:
|
||||||
|
|
||||||
|
gf -make ../english/DictEng.gf
|
||||||
|
runghc MkMorphodict.hs DictEngAbs.pgf MorphoDictEng
|
||||||
|
|
||||||
|
Result: 64923 -> 56599 functions, of which 21679 could be compounds
|
||||||
|
|
||||||
|
Swedish, using a dump of SALDO (not available in these sources)
|
||||||
|
|
||||||
|
cd saldo/
|
||||||
|
runghc SaldoGF.hs
|
||||||
|
# combine abs.tmp with Saldo.header to obtain Saldo.gf
|
||||||
|
# combine cnc.tmp with SaldoSwe.header to obtain SaldoSwe.gf
|
||||||
|
gf -make SaldoSwe.gf
|
||||||
|
cd ..
|
||||||
|
runghc MkMorphodict.hs saldo/Saldo.pgf MorphoDictSwe
|
||||||
|
|
||||||
1
src/morphodict/saldo/Saldo.header
Normal file
1
src/morphodict/saldo/Saldo.header
Normal file
@@ -0,0 +1 @@
|
|||||||
|
abstract Saldo = Cat [N,A,V,PN,Adv,Prep] ** {
|
||||||
97
src/morphodict/saldo/SaldoGF.hs
Normal file
97
src/morphodict/saldo/SaldoGF.hs
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
import Data.List
|
||||||
|
import qualified Data.Map as M
|
||||||
|
|
||||||
|
-- AR 2020-03-03
|
||||||
|
-- generating GF from preprocessed SALDO (of type Lex by John Camilleri)
|
||||||
|
|
||||||
|
main = do
|
||||||
|
lexicon <- readFile "saldom.hsdump" >>= return . readLex -- this is the preprocessed file
|
||||||
|
let gf = map (mkRules . treatNone) $ mkFuns lexicon
|
||||||
|
writeFile "abs.tmp" $ unlines $ map fst gf -- the generated files need headers
|
||||||
|
writeFile "cnc.tmp" $ unlines $ map snd gf -- use SaldoGF.header for this
|
||||||
|
|
||||||
|
-- JC's datatypes, using String for simplicity
|
||||||
|
|
||||||
|
type Lex = M.Map String Entry -- key is lemgram ID
|
||||||
|
|
||||||
|
type Table = [(String,String)]
|
||||||
|
|
||||||
|
data Entry = E
|
||||||
|
{ ePOS :: String
|
||||||
|
, eTable :: Table -- morphological tags to surface form: ("sg def gen" ,"killens")
|
||||||
|
} deriving (Show, Read)
|
||||||
|
|
||||||
|
readLex :: String -> [(String,Entry)]
|
||||||
|
readLex = read . drop 8
|
||||||
|
|
||||||
|
-- new code by AR
|
||||||
|
|
||||||
|
mkRules (fun,cat,lin) = (nunwords ["fun",fun,":",cat,";"],nunwords ["lin",fun,"=",lin,";"])
|
||||||
|
where
|
||||||
|
-- commenting out functions that still have NONE forms
|
||||||
|
nunwords ws = unwords ((if elem "\"NONE\"" (words lin) then ["--n"] else []) ++ ws)
|
||||||
|
|
||||||
|
-- converting incomplete paradigms to special mkC constructors, defined in SaldoSwe.header
|
||||||
|
treatNone (f,cat,lin) = case (cat,drop 1 (words lin)) of
|
||||||
|
("V", "\"NONE\"":"\"NONE\"":v:_) -> (f, "V", unwords ("mkVDep":[v]))
|
||||||
|
("V", i:d:p:a:b:"\"NONE\"":_) -> (f, "V", unwords ("mkVIntr":[i,d,p,a,b]))
|
||||||
|
("A", i:"\"NONE\"":p:c:s:_) -> (f, "A", unwords ("mkAUtr":[i,p,c,s]))
|
||||||
|
("A", i:d:p:"\"NONE\"":"\"NONE\"":_) -> (f, "A", unwords ("mkAComp":[i,d,p]))
|
||||||
|
("N", "\"NONE\"":d:"\"NONE\"":_) -> (f, "PN", unwords ("mkPNDef":[d])) ---
|
||||||
|
("N", i:"\"NONE\"":"\"NONE\"":_) -> (f, "PN", unwords ("mkPNIndef":[i]))
|
||||||
|
("N", i:d:"\"NONE\"":"\"NONE\"":_) -> (f, "N", unwords ("mkNSg":[i,d]))
|
||||||
|
("N", "\"NONE\"":"\"NONE\"":i:d:_) -> (f, "N", unwords ("mkNPl":[i,d]))
|
||||||
|
_ -> (f,cat,lin)
|
||||||
|
|
||||||
|
--- generating function names for simplicity: the result is fed to ../MkMorphoDict anyway
|
||||||
|
mkFuns lx = [("w"++show i, cat, lin) | (i,(cat,lin)) <- zip [1000000..] (concatMap (entry2lin . snd) lx)]
|
||||||
|
|
||||||
|
entry2lin e =
|
||||||
|
[(cat, mkLin cat ws) | ws <- manyTables valuess]
|
||||||
|
where
|
||||||
|
(cat,forms) = formSpec (ePOS e)
|
||||||
|
valuess = [nub [v | (t,v) <- eTable e, t == f] | f <- forms]
|
||||||
|
mkLin c ws = unwords $ ["mk"++c] ++ ["\"" ++ w ++ "\"" | w <- ws]
|
||||||
|
|
||||||
|
-- looking for the characteristic forms for each POS
|
||||||
|
|
||||||
|
formSpec pos = case pos of
|
||||||
|
"nn" -> ("N",[
|
||||||
|
"sg indef nom",
|
||||||
|
"sg def nom",
|
||||||
|
"pl indef nom",
|
||||||
|
"pl def nom"
|
||||||
|
])
|
||||||
|
"av" -> ("A",[
|
||||||
|
"pos indef sg u nom",
|
||||||
|
"pos indef sg n nom",
|
||||||
|
"pos indef pl nom",
|
||||||
|
"komp nom",
|
||||||
|
"super indef nom"
|
||||||
|
])
|
||||||
|
"vb" -> ("V",[
|
||||||
|
"inf aktiv",
|
||||||
|
"pres ind aktiv",
|
||||||
|
"imper",
|
||||||
|
"pret ind aktiv",
|
||||||
|
"sup aktiv",
|
||||||
|
"pret_part indef sg u nom"
|
||||||
|
])
|
||||||
|
"ab" -> ("Adv",[
|
||||||
|
"invar"
|
||||||
|
---- "pos"
|
||||||
|
])
|
||||||
|
"pp" -> ("Prep",[
|
||||||
|
"invar"
|
||||||
|
])
|
||||||
|
_ -> ("NONE++pos",["NONE++pos"]) -- ignoring other POS tags, which are rare anyway
|
||||||
|
|
||||||
|
-- trying to generate a small number of tables from sets of variant forms; seems to work well enough
|
||||||
|
|
||||||
|
manyTables formss = [
|
||||||
|
map ((!!i) . pad) formss |
|
||||||
|
i <- [0..maximum (map length formss)-1],
|
||||||
|
let pad forms = if null forms then repeat "NONE" else forms ++ repeat (head forms)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
50
src/morphodict/saldo/SaldoSwe.header
Normal file
50
src/morphodict/saldo/SaldoSwe.header
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
concrete SaldoSwe of Saldo =
|
||||||
|
CatSwe [N,A,V,Adv,Prep,PN] **
|
||||||
|
open
|
||||||
|
ParadigmsSwe, Prelude
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
-- to deal with incomplete paradigms
|
||||||
|
--- the values could be in special categories to avoid overgeneration
|
||||||
|
|
||||||
|
oper
|
||||||
|
mkVDep : Str -> V
|
||||||
|
= \v -> case v of {
|
||||||
|
x + "as" => depV (mkV (x + "a")) ;
|
||||||
|
x + "es" => depV (mkV (x + "er")) ;
|
||||||
|
x + "s" => depV (mkV (x + "er")) ;
|
||||||
|
_ => Predef.error (v ++ "not for mkVDep")
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkVIntr : (_,_,_,_,_ : Str) -> V
|
||||||
|
= \i,_,_,p,pt -> mkV i p pt ; ---
|
||||||
|
|
||||||
|
mkAUtr : (_,_,_,_ : Str) -> A
|
||||||
|
= \u,p,c,s -> mkA u u p c s ; ---
|
||||||
|
|
||||||
|
mkAComp : (_,_,_ : Str) -> A
|
||||||
|
= \u,n,p -> compoundA (mkA u n) ; ---
|
||||||
|
|
||||||
|
mkPNDef : Str -> PN
|
||||||
|
= \s -> case s of {
|
||||||
|
_ + "n" => mkPN s utrum ;
|
||||||
|
_ => mkPN s neutrum
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkPNIndef : Str -> PN
|
||||||
|
= \s -> mkPN s neutrum ; ---
|
||||||
|
|
||||||
|
mkNSg : (_,_ : Str) -> N
|
||||||
|
= \i,d -> case d of {
|
||||||
|
_ + "n" => mkN i utrum ; ---
|
||||||
|
_ => mkN i neutrum ---
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkNPl : (_,_ : Str) -> N
|
||||||
|
= \i,d -> case i of {
|
||||||
|
s + "or" => mkN (s + "a") ; ---
|
||||||
|
s + ("ar"|"er") => mkN s i ; ---
|
||||||
|
s + "en" => mkN (s + "e") i ; ---
|
||||||
|
_ => mkN i i ---
|
||||||
|
} ;
|
||||||
13
src/swedish/README.md
Normal file
13
src/swedish/README.md
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Swedish
|
||||||
|
|
||||||
|
## Language info
|
||||||
|
|
||||||
|
- English name: Swedish
|
||||||
|
- Autonym: Svenska
|
||||||
|
- ISO code: Swe
|
||||||
|
|
||||||
|
## Dictionaries
|
||||||
|
|
||||||
|
- `OldDictSwe`: Converted from SALDO using [this code](https://github.com/MalinAhlberg/SwedishProject/tree/master/saldo) in 2011.
|
||||||
|
- `NewDictSwe`: Re-import from SALDO using [this code](https://github.com/DigitalGrammarsAB/SALDOtoGF/tree/a45e503a824ded39844df2aeeb7a6ee891e3bee1) in 2018, with more words and different identifier structure.
|
||||||
|
- `DictSwe` is a union of `OldDictSwe` and `NewDictSwe`
|
||||||
Reference in New Issue
Block a user