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
|
# 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, bVarPpas):
if not sPattern or re.search(sPattern, sVerb):
sFlexion = sVerb[0:-nCut] + sAdd if nCut else sVerb + sAdd
lConj.append((sFlexion, ":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 = list(oConj["V1"][sVerb[-5:]])
# 4 lettres
elif sVerb[-4:] in oConj["V1"]:
|
>
|
|
>
>
|
>
>
|
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
|
"""
Conjugation generator
beta stage, unfinished, the root for a new way to generate flexions…
"""
import re
def conjugate (sVerb, sVerbTag="i_____a", bVarPpas=True):
"conjugate <sVerb> and returns a list of tuples (conjugation form, tags)"
lConj = []
cGroup = getVerbGroupChar(sVerb)
for nCut, sAdd, sFlexTags, sPattern in getConjRules(sVerb, bVarPpas):
if not sPattern or re.search(sPattern, sVerb):
sFlexion = sVerb[0:-nCut] + sAdd if nCut else sVerb + sAdd
lConj.append((sFlexion, ":V" + cGroup + "_" + sVerbTag + sFlexTags))
return lConj
def getVerbGroupChar (sVerb):
"returns the group number of <sVerb> guessing on its ending"
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):
"returns a list of lists to conjugate a verb, guessing on its ending"
if sVerb.endswith("er"):
# premier groupe, conjugaison en fonction de la terminaison du lemme
# 5 lettres
if sVerb[-5:] in oConj["V1"]:
lConj = list(oConj["V1"][sVerb[-5:]])
# 4 lettres
elif sVerb[-4:] in oConj["V1"]:
|
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
[2, "isses", ":Sp:Sq:2s/*", False],
[2, "isse", ":Sp:3s/*", False],
[2, "ît", ":Sq:3s/*", False],
[2, "is", ":E:2s/*", False],
[2, "issons", ":E:1p/*", False],
[2, "issez", ":E:2p/*", False]
],
# premier groupe (bien plus irrégulier que prétendu)
"V1": {
# a
# verbes en -er, -ger, -yer, -cer
"er": [
[2, "er", ":Y/*", False],
[2, "ant", ":P/*", False],
|
|
|
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
[2, "isses", ":Sp:Sq:2s/*", False],
[2, "isse", ":Sp:3s/*", False],
[2, "ît", ":Sq:3s/*", False],
[2, "is", ":E:2s/*", False],
[2, "issons", ":E:1p/*", False],
[2, "issez", ":E:2p/*", False]
],
# premier groupe (bien plus irrégulier que prétendu)
"V1": {
# a
# verbes en -er, -ger, -yer, -cer
"er": [
[2, "er", ":Y/*", False],
[2, "ant", ":P/*", False],
|