-
Notifications
You must be signed in to change notification settings - Fork 0
/
fr-vi.foma
124 lines (107 loc) · 5.59 KB
/
fr-vi.foma
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# FRENCH SOUND INVENTORY
# The French vowels system consists of 12 oral vowels and 4 nasal vowels
define frOralVowels [ i | y | e | ø | ɛ | œ | ə | a | u | o | ɔ | ɑ ];
define frNasalVowels [ ɛ̃ | œ̃ | ɔ̃ | ɑ̃ ];
define frVowels [ frOralVowels | frNasalVowels ];
# Set of French consonants
define frCons [ p | b | t | d | k | g | m | n | ɲ | ŋ | f | v | s | z | ʃ | ʒ | ʁ | w | l | j | ɥ ]; # dʒ is rare in French
define frConsinOnsetCluster [ p | t | k | f | v | b | d | g ];
define frLabials [ p | b | f | m ];
define frDentals [ t | d | s | z | n | l ];
define frPalatals [ ɲ ];
define frNasals [ m | n | ɲ | ŋ ];
define frVelars [ k | g ];
define frSounds [frOralVowels | frNasalVowels | frCons];
# VIETNAMESE SOUND INVENTORY
# Set of Vietnamese vowels
define viVowels [ i | e | ɛ | ɤ | ɤ̆ | a | ă | u | o | ɔ | ɯ | "iə" | "uə" | "ɯə" ];
# Note that some analysis uses c instead of t͡ɕ. We use the same convention as in Kirby's paper and use t͡ɕ for Vietnamese palatal.
define viCons [ ɓ | t | tʰ | ɗ | t͡ɕ | k | ʔ | m | n | ɲ | ŋ | f | v | s | z | x | ɣ | h | w | j | l ];
define viSounds [ viVowels | viCons ];
# PHONOLOGICAL ADAPTATION PATTERN RULES
# CONSONANT MAPPINGS
# Context-free mapping for consonants.
define contextFreeMappings [ b -> ɓ , d -> ɗ , g -> ɣ , t ʁ -> t͡ɕ , dʒ -> z , ʃ -> s , ʒ -> z ];
#define njChange [ n j -> ɲ ];
# ONSET CONSONANT RULES
#
# Rules applied in onset environments
define onsetSingle [ p -> ɓ , ʁ -> z , j -> z || .#. _ , "." _ ];
# French onset consonant clusters include: sp, st, sk, spl, spʁ, stʁ, skl, skʁ,
# pn, ps, pf, pt, kn, km, kv, ks, kt,
# tl, tm, ts, tʃ, sl, sm, sn, sv, sf, ʃl, ʃʁ, ʃn, ʃv, ʃpʁ, psk, gn, gz, dz, dʒ, zl, zv, zb, zgʁ, mn, ft.
# Epenthesis rules
define jRule [ [ m | n ] j -> ɲ || _ frOralVowels ,
j -> i "." || [ m | n ] _ frOralVowels ]; # Conflict with rule n j above?
define epenthesisOnset [ b l -> b ɤ [ "2" | "1" ] "." l ,
g l -> g ɤ [ "2" | "1" ] "." l ,
g l -> g ,
g ʁ -> g ɤ [ "2" | "1" ] "." ʁ ,
f l -> f ɤ [ "2" | "1" ] "." l ,
k l -> k ɤ [ "2" | "1" ] "." l ,
s l -> s i [ "2" | "1" ] "." l ,
s t -> s i [ "2" | "1" ] "." t ,
s k -> s i [ "2" | "1" ] "." k ,
s p -> s i [ "2" | "1" ] "." b || .#. _ , "." _ ];
# Deletion rules.
define deletionOnset [ p [ ʁ | l ] -> ɓ ,
t l -> t ,
k [ ʁ | l ] -> k ,
f [ ʁ | l ] -> f ,
v [ ʁ | l ] -> v ,
b [ ʁ | l ] -> ɓ ,
d [ ʁ | l ] -> d ,
g [ ʁ | l ] -> g || .#. _ , "." _ ];
define onsetMappings [ epenthesisOnset .o. onsetSingle .o. jRule .o. deletionOnset ];
# CODA CONSONANT RULES
define rCodaChange [ ʁ -> k || _ "." ,, # ʁ is changed to k word-medially
ʁ -> 0 || _ .#. ]; # ʁ is deleted word finally, as observed in Kang et al.
define labialCodaChange [ [ frLabials - m ] -> p || _ .#. , _ "."];
define dentalCodaChange [ [ frDentals - [ n | l ] ] -> t || _ .#. , _ "." ];
define velarCodaChange [ [ k | g ] -> k || _ .#. , _ "."];
define lCodaChange [ l -> n || _ .#. , _ "." ];
define postAlveolarCodaChange [ [ ʃ | ʒ ] -> t , ʃ -> k || _ .#. , _ "."];
define codaCluster [ l m -> m ,
l n -> n ,
l k -> n ,
t k -> t ,
ʁ m -> m ,
k frCons -> k ,
ʁ frCons -> k ,
m frCons -> m ,
ʁ d -> t ,
ŋ t -> ŋ ,
s frCons -> t || _ .#. , _ "." ];
define codaMappings [ rCodaChange .o. labialCodaChange .o. dentalCodaChange .o. velarCodaChange .o. lCodaChange .o. postAlveolarCodaChange .o. epenthesisOnset .o. codaCluster ];
# VOWEL MAPPINGS. Implemented based on descriptions from Kang's paper.
define yToU [ y -> u || ʁ _ ];
define yToI [ y -> i || frVelars _ ];
define yContextFree [ y -> w i ]; # The most accurate mapping is to "wi".
define schwaContextFree [ [ ø | œ | ə ] -> ɤ ];
#define oContextFree [ [ o | ɔ ]-> [ o | ɔ ] ];
#define eContextFree [ [ e | ɛ ] -> [ e | ɛ ] ];
define aChange [ a -> ă || _ [ frPalatals | frVelars ] , j _]; # a remains a before uvular r.
define dipthongsforR [ u -> "uə" ,
i -> "iə" ,
y -> u || _ ʁ ];
define loiDePositionbeforeR [ ɛ -> ɛ , ɔ -> ɔ || _ ʁ ];
define loiDePosition [ ɔ -> o , ɛ -> e || _ "." , _ .#. ,,
o -> ɔ , e -> ɛ || _ viCons ]; # o and e are preferred in open syllables, ɔ and ɛ in closed.
define nasalVowelsBeforeLabials [ ɛ̃ -> ɛ m ,
ɑ̃ -> ă m ,
ɔ̃ -> [ o | ɔ ] m || _ (".") [p | b] ];
define nasalVowelsContextFree [ ɛ̃ -> ɛ ŋ ,
ɑ̃ -> ă ŋ ,
ɔ̃ -> o ŋ ]; # do not include ɔ̃ -> ɔ ŋ because of how rare it is.
define vowelMappings [ loiDePositionbeforeR .o. loiDePosition .o. aChange .o. dipthongsforR .o. nasalVowelsBeforeLabials .o. nasalVowelsContextFree .o. yToU .o. yToI .o. yContextFree .o. schwaContextFree ];
# Truncation
define Truncate [ "." t ʁ ə -> 0 || _ .#. ];
# TONE ASSIGNMENT (applied at the end)
define RisingTone [ [..] -> 5 || [p | t | k] _ .#. , [p | t | k] _ "." ];
define defaultToHighLevel [ [..] -> "1" || viSounds _ .#. , viSounds _ "." ];
define toneChange [ RisingTone .o. defaultToHighLevel ];
define insertGlottal [ [..] -> ʔ || .#. _ viVowels ];
# Rule composition
# VowelMappings need to be applied before codaMappings because before example loiDePositionbeforeR has to be applied before rCodaChange is deleted or changed to k.
define FrenchToVietnamese [ Truncate .o. onsetMappings .o. vowelMappings .o. codaMappings .o. contextFreeMappings .o. toneChange .o. insertGlottal ];
re FrenchToVietnamese;