-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathverbum.py
More file actions
64 lines (53 loc) · 2.28 KB
/
verbum.py
File metadata and controls
64 lines (53 loc) · 2.28 KB
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
from itertools import chain
import adjektivum
import slovni_tvar
class Verbum(slovni_tvar.SlovniTvar):
PREFIXY = ('do', 'na', 'o', 'ob', 'pro', 's', 'u', 'vy', 'z', 'za')
TEMATA = ('a', 'e', 'i', 'nou')
def __init__(self, rodic=None, atributy={}, vyznamy={}, lemma='', koren='',
prefix='', tema='', koncovka=None):
if lemma:
koren, tema, koncovka = self.zjistit_tema(lemma)
super().__init__(rodic, atributy, vyznamy, koren, prefix, tema,
koncovka)
self.atributy['k'] = '5' # kind, slovní druh, part of speech (POS)
self.neg = self.atributy.get('e')
self.aspekt = self.atributy.get('a')
if tema:
self.tema = tema
modus = self.atributy.get('m')
if modus is not None and modus != 'F':
raise ValueError('očekává se infinitiv')
@classmethod
def zjistit_tema(cls, lemma):
# TODO: nepravidelná/atematická slovesa řešit výjimkami
if not lemma.endswith('t'):
raise ValueError('očekává se infinitiv')
kmen = lemma[:-1] # derivaci začínáme od neprefigovaných sloves!
for tema in cls.TEMATA:
if kmen.endswith(tema):
koren = kmen[:-len(tema)]
return koren, tema, 't'
else:
raise ValueError('neznámý tematický sufix (nepravidelné sloveso?)')
def vytvorit_odvozeniny(self):
return chain(
self.adjektivizace(),
self.prefixace(),
)
def prefixace(self):
if self.neg != 'N' and self.aspekt == 'I':
for prefix in self.PREFIXY:
yield Verbum(self, dict(a='P'), prefix=prefix)
def adjektivizace(self):
# přes slovnědruhově sporné n-ové participium
if self.vyznamy.get('posesivum'):
return
# tenčit → tenčený, plašit → plašený
if self.tema == 'i':
yield adjektivum.Adjektivum(self, dict(d='1', g='M'),
nahradit_sufix="'e", sufix='n',
koncovka='ý')
else: # plakat → plakaný
yield adjektivum.Adjektivum(self, dict(d='1', g='M'), sufix='n',
koncovka='ý')