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
|
# Conjugation data
# beta stage, unfinished, may be useless or the root for a new way to generate flexions…
# Règles de conjugaison
oConj = {
"V1_ppas": {
"var": [
[2, "é", ":Q:A:1ŝ:m:s/*", False],
[2, "és", ":Q:A:m:p/*", False],
[2, "ée", ":Q:A:f:s/*", False],
[2, "ées", ":Q:A:f:p/*", False],
],
"invar": [
[2, "é", ":Q:e:i/*", False],
]
},
"V2_ppas": {
"var": [
[2, "i", ":Q:A:m:s/*", False],
[2, "is", ":Q:A:m:p/*", False],
[2, "ie", ":Q:A:f:s/*", False],
[2, "ies", ":Q:A:f:p/*", False],
],
"invar": [
[2, "i", ":Q:e:i/*", False],
]
},
# deuxième groupe (le seul groupe régulier)
"V2": [
[2, "ir", ":Y/*", False],
|
|
>
>
|
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
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
|
# Conjugation generator
# beta stage, unfinished, the root for a new way to generate flexions…
import re
def conjugate (sVerb, sVerbTag="i_____a", bVarPpas=True):
lConj = []
cGroup = getVerbGroupChar(sVerb)
for nCut, sAdd, sFlexTags, sPattern in getConjRules(sVerb):
if not sPattern or re.search(sPattern, sVerb):
lConj.append((sVerb[0:-nCut]+sAdd, ":V" + cGroup + "_" + sVerbTag + sFlexTags))
return lConj
def getVerbGroupChar (sVerb, ):
sVerb = sVerb.lower()
if sVerb.endswith("er"):
return "1"
if sVerb.endswith("ir"):
return "2"
if sVerb == "être" or sVerb == "avoir":
return "0"
if sVerb.endswith("re"):
return "3"
return "4"
def getConjRules (sVerb, bVarPpas=True, nGroup=2):
if sVerb.endswith("er"):
# premier groupe, conjugaison en fonction de la terminaison du lemme
# 5 lettres
if sVerb[-5:] in oConj["V1"]:
lConj = oConj["V1"][sVerb[-5:]]
# 4 lettres
elif sVerb[-4:] in oConj["V1"]:
if sVerb.endswith(("eler", "eter")):
lConj = oConj["V1"][sVerb[-4:]]["1"]
lConj = oConj["V1"][sVerb[-4:]]
# 3 lettres
elif sVerb[-3:] in oConj["V1"]:
lConj = oConj["V1"][sVerb[-3:]]
else:
lConj = oConj["V1"]["er"]
lConj.extend(oConj["V1_ppas"][bVarPpas])
elif sVerb.endswith("ir") and nGroup <= 2:
# deuxième groupe
lConj = oConj["V2"]
lConj.extend(oConj["V2_ppas"][bVarPpas])
else:
# TODO: troisième groupe
lConj = [ [0, "", ":Y/*", false] ]
return lConj
oConj = {
"V1_ppas": {
True: [
[2, "é", ":Q:A:1ŝ:m:s/*", False],
[2, "és", ":Q:A:m:p/*", False],
[2, "ée", ":Q:A:f:s/*", False],
[2, "ées", ":Q:A:f:p/*", False],
],
False: [
[2, "é", ":Q:e:i/*", False],
]
},
"V2_ppas": {
True: [
[2, "i", ":Q:A:m:s/*", False],
[2, "is", ":Q:A:m:p/*", False],
[2, "ie", ":Q:A:f:s/*", False],
[2, "ies", ":Q:A:f:p/*", False],
],
False: [
[2, "i", ":Q:e:i/*", False],
]
},
# deuxième groupe (le seul groupe régulier)
"V2": [
[2, "ir", ":Y/*", False],
|