Skip to content

Commit c52c3df

Browse files
committed
Czech compound case markers.
1 parent 78b5427 commit c52c3df

1 file changed

Lines changed: 241 additions & 0 deletions

File tree

udapi/block/mwe/msfcase.py

Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,35 @@ class MsfCase(Block):
1010
adposmap = {
1111
'v+Loc': 'Ine',
1212
'uvnitř+Gen': 'Ine',
13+
'uvnitř+': 'Ine',
14+
'mezi_uvnitř+Gen': 'Ine', # annotation error?
1315
'uprostřed+Gen': 'Ces',
1416
'mezi+Ins': 'Int',
17+
'mezi+Nom': 'Int', # annotation error
18+
'mezi+Voc': 'Int', # annotation error
1519
'vně+Gen': 'Ext',
20+
'stranou+Gen': 'Ext',
21+
'stranou+Dat': 'Ext',
1622
'na+Loc': 'Ade',
23+
'na_mimo+Loc': 'Ade', # annotation error?
24+
'na_úroveň+Gen': 'Ade',
25+
'na_úroveň+': 'Ade',
26+
'v_proces+Gen': 'Ade', # ???
1727
'v_rámec+Gen': 'Ade', # ???
28+
'v_rámec+': 'Ade', # ???
29+
'v_řada+Gen': 'Ade', # ???
30+
'z_oblast+Gen': 'Ade', # ???
1831
'vedle+Gen': 'Apu',
1932
'u+Gen': 'Chz',
2033
'kolem+Gen': 'Cir',
34+
'kol+Gen': 'Cir',
2135
'dokola+Gen': 'Cir',
2236
'okolo+Gen': 'Cir',
2337
'v_oblast+Gen': 'Cir',
38+
'v_oblast+': 'Cir',
2439
'blízko+Dat': 'Prx',
2540
'blízko+Gen': 'Prx',
41+
'blízko+': 'Prx',
2642
'nedaleko+Gen': 'Prx',
2743
'daleko+Gen': 'Prx', # lemma of 'nedaleko'
2844
'poblíž+Gen': 'Prx',
@@ -32,66 +48,134 @@ class MsfCase(Block):
3248
'vespod+Gen': 'Sub',
3349
'před+Ins': 'Ant',
3450
'vpředu+Gen': 'Ant',
51+
'na_čelo+Gen': 'Ant',
52+
'v_čelo+Gen': 'Ant',
53+
'v_čelo+': 'Ant',
3554
'za+Ins': 'Pst',
3655
'naproti+Dat': 'Opp',
3756
'od+Gen': 'Abl',
57+
'od+Dat': 'Abl', # annotation error
58+
'směr_od+Gen': 'Abl',
59+
'z_strana+Gen': 'Abl',
60+
'z_strana+': 'Abl',
3861
'z+Gen': 'Ela',
62+
'z+Nom': 'Ela', # annotation error
63+
'z+Dat': 'Ela', # annotation error
3964
'zevnitř+Gen': 'Ela',
4065
'zprostřed+Gen': 'Cne',
4166
's+Gen': 'Del',
4267
'zpod+Gen': 'Sbe',
4368
'zpoza+Gen': 'Pse',
4469
'po+Loc': 'Per',
70+
'cesta+Gen': 'Per',
71+
'cesta+Ins': 'Per',
4572
'napříč+Gen': 'Crs',
4673
'napříč+Ins': 'Crs',
4774
'podél+Gen': 'Lng',
4875
'skrz+Acc': 'Inx',
4976
'přes+Acc': 'Spx',
77+
'přes+Nom': 'Spx', # annotation error
5078
'ob+Acc': 'Cix',
5179
'po+Acc': 'Ter',
80+
'po+Nom': 'Ter', # annotation error
81+
'po+Gen': 'Ter', # annotation error
5282
'do+Gen': 'Ill',
83+
'do+Acc': 'Ill', # annotation error
84+
'do_/+Gen': 'Ill',
5385
'dovnitř+Gen': 'Ill',
5486
'doprostřed+Gen': 'Cnl',
5587
'mezi+Acc': 'Itl',
5688
'na+Acc': 'All',
89+
'na+Nom': 'All', # annotation error
5790
'na+Gen': 'All', # annotation error
5891
'k+Dat': 'Apl',
92+
'k+Nom': 'Apl', # annotation error
93+
'vstříc+Dat': 'Apl',
94+
'do_oblast+Gen': 'Apl',
95+
'směr+': 'Apl',
96+
'směr_k+Dat': 'Apl',
97+
'směr_k+': 'Apl',
98+
'směr_na+Acc': 'Apl',
99+
'v_směr_k+Dat': 'Apl',
59100
'nad+Acc': 'Spl',
101+
'nad+Nom': 'Spl', # annotation error
60102
'pod+Acc': 'Sbl',
61103
'před+Acc': 'Anl',
104+
'před+Gen': 'Anl', # annotation error
62105
'za+Acc': 'Psl',
106+
'dík_za+Acc': 'Psl', # annotation error?
63107
'dokud': 'Tan',
64108
'nežli': 'Tan',
65109
'v+Acc': 'Tem',
66110
'v+Nom': 'Tem', # annotation error
111+
'v+Gen': 'Tem', # annotation error
112+
'při_příležitost+Gen': 'Tem',
113+
'současně_s+Ins': 'Tem',
114+
'u_příležitost+Gen': 'Tem',
67115
'v_období+Gen': 'Tpx',
68116
'počátkem+Gen': 'Din',
117+
'počátek+Gen': 'Din',
118+
'počínat+Ins': 'Din',
119+
'počínat+': 'Din',
69120
'začátkem+Gen': 'Din',
121+
'začátek+Gen': 'Din',
70122
'během+Gen': 'Dur',
71123
'postupem+Gen': 'Dur',
124+
'postup+Gen': 'Dur',
72125
'při+Loc': 'Dur',
73126
'v_průběh+Gen': 'Dur',
74127
'za+Gen': 'Der',
75128
'koncem+Gen': 'Dtr',
76129
'konec+Gen': 'Dtr',
130+
'k_konec+Gen': 'Dtr',
131+
'končit+Ins': 'Dtr',
77132
'závěrem+Gen': 'Dtr',
133+
'závěr+Gen': 'Dtr',
134+
'na_závěr+Gen': 'Dtr',
135+
'v_závěr+Gen': 'Dtr',
78136
'jakmile': 'Tps',
79137
'jen_co': 'Tps',
138+
'před_po+Loc': 'Tps',
80139
'počínaje+Ins': 'Teg',
81140
'jménem+Nom': 'Atr',
141+
'jméno+Nom': 'Atr',
82142
'zdali': 'Atr',
83143
'že': 'Atr',
144+
'z_řada+Gen': 'Gen',
84145
's+Ins': 'Com',
146+
's+Nom': 'Com', # annotation error
85147
'spolu_s+Ins': 'Com',
148+
'spolu_s+': 'Com',
86149
'společně_s+Ins': 'Com',
150+
'společně_s+': 'Com',
151+
'v_čelo_s+Ins': 'Com',
152+
'v_spolupráce_s+Ins': 'Com',
87153
'bez+Gen': 'Abe',
88154
'včetně+Gen': 'Inc',
155+
'nad_rámec+Gen': 'Add',
89156
'kromě+Gen': 'Exc',
157+
'krom+Gen': 'Exc',
90158
'mimo+Acc': 'Exc',
91159
'mimo+Gen': 'Exc',
92160
'vyjma+Gen': 'Exc',
161+
'až_na+Acc': 'Exc',
162+
's_výjimka+Gen': 'Exc',
163+
's_výjimka+': 'Exc',
93164
'místo+Gen': 'Sbs',
165+
'místo+Ins': 'Sbs', # něčím místo něčím jiným
166+
'místo+Loc': 'Sbs', # annotation error
167+
'místo_do+Gen': 'Sbs',
168+
'místo_k+Dat': 'Sbs',
169+
'místo_na+Acc': 'Sbs',
170+
'místo_na+': 'Sbs',
171+
'místo_po+Loc': 'Sbs',
172+
'místo_v+Acc': 'Sbs',
173+
'místo_v+': 'Sbs',
174+
'místo_za+Acc': 'Sbs',
94175
'namísto+Gen': 'Sbs',
176+
'namísto_do+Gen': 'Sbs',
177+
'v_zastoupení+Gen': 'Sbs',
178+
'výměna_za+Acc': 'Sbs',
95179
'jako': 'Ess',
96180
'jako+': 'Ess',
97181
'jako+Nom': 'Ess',
@@ -100,27 +184,58 @@ class MsfCase(Block):
100184
'jako_u+Gen': 'Ess',
101185
'jako_v+Loc': 'Ess',
102186
'formou+Gen': 'Ess',
187+
'forma+Gen': 'Ess',
188+
'v_forma+Gen': 'Ess',
189+
'v_podoba+Gen': 'Ess',
190+
'v_podoba+': 'Ess',
191+
'shoda+Gen': 'Equ',
192+
'v_shoda_s+Ins': 'Equ',
193+
'do_soulad_s+Ins': 'Sem',
194+
'na_způsob+Gen': 'Sem',
195+
'po_vzor+Gen': 'Sem',
196+
'úměrně+Dat': 'Sem',
197+
'úměrně_k+Dat': 'Sem',
198+
'úměrně_s+Ins': 'Sem',
199+
'v_analogie_s+Ins': 'Sem',
200+
'v_duch+Gen': 'Sem',
201+
'v_smysl+Gen': 'Sem',
103202
'oproti+Dat': 'Dsm',
104203
'na_rozdíl_od+Gen': 'Dsm',
204+
'na_rozdíl_od+': 'Dsm',
105205
'než': 'Cmp',
106206
'než+Nom': 'Cmp',
107207
'než+Gen': 'Cmp',
108208
'než+Acc': 'Cmp',
109209
'než_nad+Ins': 'Cmp',
110210
'než_v+Acc': 'Cmp',
111211
'než_v+Loc': 'Cmp',
212+
'v_poměr_k+Dat': 'Cmp',
213+
'v_poměr_k+': 'Cmp',
214+
'v_porovnání_k+Dat': 'Cmp',
215+
'v_porovnání_s+Ins': 'Cmp',
216+
'v_porovnání_s+': 'Cmp',
112217
'v_srovnání_s+Ins': 'Cmp',
218+
'v_srovnání_s+': 'Cmp',
113219
'o+Acc': 'Dif',
220+
'o+Nom': 'Dif', # annotation error
221+
'o+Gen': 'Dif', # annotation error
222+
'o+Dat': 'Dif', # annotation error
223+
'o_o+Acc': 'Dif', # annotation error
114224
'kdežto': 'Cmt',
115225
'přičemž': 'Cmt',
116226
'zatímco': 'Cmt',
117227
'díky+Dat': 'Cau',
228+
'dík+Dat': 'Cau',
118229
'kvůli+Dat': 'Cau',
119230
'vinou+Gen': 'Cau',
120231
'vlivem+Gen': 'Cau',
121232
'vliv+Gen': 'Cau',
233+
'vliv+': 'Cau',
234+
'vinou+Gen': 'Cau',
235+
'vina+Gen': 'Cau',
122236
'zásluhou+Gen': 'Cau',
123237
'zásluha+Gen': 'Cau',
238+
'z_důvod+Gen': 'Cau',
124239
'v_důsledek+Gen': 'Cau',
125240
'jelikož': 'Cau',
126241
'ježto': 'Cau',
@@ -129,15 +244,30 @@ class MsfCase(Block):
129244
'takže': 'Cau',
130245
'následek+Gen': 'Cau',
131246
'aby': 'Pur',
247+
'jméno+Gen': 'Pur',
248+
'pro_případ+Gen': 'Pur',
249+
'v_jméno+Gen': 'Pur',
250+
'v_zájem+Gen': 'Pur',
251+
'za_účel+Gen': 'Pur',
132252
'na_základ+Gen': 'Cns',
253+
'pod_vliv+Gen': 'Cns',
133254
's_ohled_na+Acc': 'Cns',
255+
's_přihlédnutí_k+Dat': 'Cns',
256+
's_přihlédnutí_na+Acc': 'Cns',
134257
'v_souvislost_s+Ins': 'Cns',
258+
'v_souvislost_s+': 'Cns',
135259
'v_světlo+Gen': 'Cns',
136260
'vzhledem_k+Dat': 'Cns',
261+
'v_soulad_s+Ins': 'Cns',
262+
'v_soulad_s+': 'Cns',
263+
'z_titul+Gen': 'Cns',
137264
'ať': 'Ign',
138265
'bez_ohled_na+Acc': 'Ign',
266+
'nehledě_k+Dat': 'Ign',
267+
'nehledě_na+Acc': 'Ign',
139268
'navzdory+Dat': 'Ccs',
140269
'vzdor+Dat': 'Ccs',
270+
'v_rozpor_s+Ins': 'Ccs',
141271
'ač': 'Ccs',
142272
'ačkoli': 'Ccs',
143273
'byť': 'Ccs',
@@ -149,22 +279,100 @@ class MsfCase(Block):
149279
'li': 'Cnd',
150280
'pakliže': 'Cnd',
151281
'pokud': 'Cnd',
282+
'pokud+Nom': 'Cnd',
152283
'zda': 'Cnd',
153284
'v_případ+Gen': 'Cnd',
285+
'v_případ+': 'Cnd',
286+
'v_závislost_na+Loc': 'Cnd',
287+
'v_závislost_s+Ins': 'Cnd',
154288
'o+Loc': 'The',
155289
'ohledně+Gen': 'The',
156290
'stran+Gen': 'The',
291+
'co_do+Gen': 'The',
292+
'na_téma+Gen': 'The',
293+
'na_téma+Nom': 'The',
294+
'na_téma+': 'The',
295+
'na_úsek+Gen': 'The',
296+
'po_stránka+Gen': 'The',
297+
'v_obor+Gen': 'The',
298+
'v_otázka+Gen': 'The',
299+
'v_spojení_s+Ins': 'The',
300+
'v_věc+Gen': 'The',
301+
'v_vztah_k+Dat': 'The',
302+
'v_vztah_k+': 'The',
303+
'v_záležitost+Gen': 'The',
304+
'v_znamení+Gen': 'The',
157305
'z_hledisko+Gen': 'The',
306+
'z_hledisko+': 'The',
158307
'podle+Gen': 'Quo',
159308
'dle+Gen': 'Quo',
160309
'pomocí+Gen': 'Ins',
310+
's_pomoc+Gen': 'Ins',
161311
'prostřednictvím+Gen': 'Ins',
162312
'prostřednictví+Gen': 'Ins',
313+
'prostřednictví+Ins': 'Ins', # annotation error
314+
'prostřednictví+': 'Ins',
315+
'za_pomoc+Gen': 'Ins',
163316
'pro+Acc': 'Ben',
317+
'pro+Nom': 'Ben', # annotation error
318+
'pro+Gen': 'Ben', # annotation error
319+
'pro+Ins': 'Ben', # annotation error
320+
'napospas+Dat': 'Ben',
321+
'k_prospěch+Gen': 'Ben',
322+
'na_úkor+Gen': 'Ben',
323+
'na_vrub+Gen': 'Ben',
324+
'v_prospěch+Gen': 'Ben',
325+
'v_neprospěch+Gen': 'Ben',
326+
'v_služba+Gen': 'Ben',
164327
'proti+Dat': 'Adv',
328+
'proti+Gen': 'Adv',
165329
'kontra+Nom': 'Adv',
166330
'versus+Nom': 'Adv',
167331
'vůči+Dat': 'Adv',
332+
# subordinators
333+
'dokud': 'Tan',
334+
'nežli': 'Tan',
335+
'jakmile': 'Tps',
336+
'jen_co': 'Tps',
337+
'zdali': 'Atr',
338+
'že': 'Atr',
339+
'jako': 'Ess',
340+
'než': 'Cmp',
341+
'kdežto': 'Cmt',
342+
'přičemž': 'Cmt',
343+
'zatímco': 'Cmt',
344+
'jelikož': 'Cau',
345+
'ježto': 'Cau',
346+
'poněvadž': 'Cau',
347+
'protože': 'Cau',
348+
'takže': 'Cau',
349+
'aby': 'Pur',
350+
'ať': 'Ign',
351+
'ač': 'Ccs',
352+
'ačkoli': 'Ccs',
353+
'byť': 'Ccs',
354+
'přestože': 'Ccs',
355+
'třebaže': 'Ccs',
356+
'jestli': 'Cnd',
357+
'jestliže': 'Cnd',
358+
'ledaže': 'Cnd',
359+
'li': 'Cnd',
360+
'pakliže': 'Cnd',
361+
'pokud': 'Cnd',
362+
'zda': 'Cnd',
363+
# coordinators
364+
'a': 'Conj',
365+
'i': 'Conj',
366+
'ani': 'Nnor',
367+
'nebo': 'Disj',
368+
'či': 'Disj',
369+
'ale': 'Advs',
370+
'avšak': 'Advs',
371+
'však': 'Advs',
372+
'nýbrž': 'Advs',
373+
'neboť': 'Reas',
374+
'tedy': 'Cnsq',
375+
'tak': 'Cnsq'
168376
}
169377

170378
def process_node(self, node):
@@ -204,4 +412,37 @@ def process_node(self, node):
204412
else:
205413
logging.warn(f"No Case value found for '{caseadpostring}'.")
206414
msfcase = caseadpostring
415+
# Omer wants to collect cases from both adpositions and subordinators
416+
# but we will consider subordinators only if we do not have any case
417+
# from morphology or adpositions.
418+
if not msfcase:
419+
subordinators = []
420+
for c in node.children:
421+
if c.udeprel == 'mark':
422+
lemma = c.lemma
423+
# If it has outgoing 'fixed' relations, it is a multiword adposition.
424+
fixedchildren = [x.lemma for x in c.children if x.udeprel == 'fixed']
425+
if fixedchildren:
426+
lemma += '_' + '_'.join(fixedchildren)
427+
subordinators.append(lemma)
428+
if subordinators:
429+
subordstring = '_'.join(subordinators)
430+
if subordstring in self.adposmap:
431+
msfcase = self.adposmap[subordstring]
432+
# To lump coordinators with all the above makes even less sense but for
433+
# the moment we do it.
434+
if not msfcase:
435+
coordinators = []
436+
for c in node.children:
437+
if c.udeprel == 'cc':
438+
lemma = c.lemma
439+
# If it has outgoing 'fixed' relations, it is a multiword adposition.
440+
fixedchildren = [x.lemma for x in c.children if x.udeprel == 'fixed']
441+
if fixedchildren:
442+
lemma += '_' + '_'.join(fixedchildren)
443+
coordinators.append(lemma)
444+
if coordinators:
445+
coordstring = '_'.join(coordinators)
446+
if coordstring in self.adposmap:
447+
msfcase = self.adposmap[coordstring]
207448
node.misc['MSFCase'] = msfcase

0 commit comments

Comments
 (0)