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
|
def suggVerbPpas (sFlex, sPattern=None):
"suggest past participles for <sFlex>"
dSugg = {}
for sStem in _oSpellChecker.getLemma(sFlex):
tTags = conj._getTags(sStem)
if tTags:
if not sPattern:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")] = ""
elif sPattern == ":m:s":
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
elif sPattern == ":m:p":
if conj._hasConjWithTags(tTags, ":PQ", ":Q2"):
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
elif sPattern == ":f:s":
if conj._hasConjWithTags(tTags, ":PQ", ":Q3"):
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
elif sPattern == ":f:p":
if conj._hasConjWithTags(tTags, ":PQ", ":Q4"):
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
elif sPattern == ":s":
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q3")] = ""
elif sPattern == ":p":
if conj._hasConjWithTags(tTags, ":PQ", ":Q2"):
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q2")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q4")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":PQ", ":Q1")] = ""
if "" in dSugg:
del dSugg[""]
if dSugg:
return "|".join(dSugg.keys())
return ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
def suggVerbPpas (sFlex, sPattern=None):
"suggest past participles for <sFlex>"
dSugg = {}
for sStem in _oSpellChecker.getLemma(sFlex):
tTags = conj._getTags(sStem)
if tTags:
if not sPattern:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:p")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:s")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:p")] = ""
elif sPattern == ":m:s":
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
elif sPattern == ":m:p":
if conj._hasConjWithTags(tTags, ":Q", ":m:p"):
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:p")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
elif sPattern == ":f:s":
if conj._hasConjWithTags(tTags, ":Q", ":f:s"):
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:s")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
elif sPattern == ":f:p":
if conj._hasConjWithTags(tTags, ":Q", ":f:p"):
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:p")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
elif sPattern == ":s":
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:s")] = ""
elif sPattern == ":p":
if conj._hasConjWithTags(tTags, ":Q", ":m:p"):
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:p")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":f:p")] = ""
else:
dSugg[conj._getConjWithTags(sStem, tTags, ":Q", ":m:s")] = ""
if "" in dSugg:
del dSugg[""]
if dSugg:
return "|".join(dSugg.keys())
return ""
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
lTenses = [ m.group(0) for m in re.finditer(":(?:Y|I[pqsf]|S[pq]|K|P)", sMorph) ]
if sWho:
for sTense in lTenses:
if conj.hasConj(sStem, sTense, sWho):
dSugg[conj.getConj(sStem, sTense, sWho)] = ""
else:
for sTense in lTenses:
for sWho in [ m.group(0) for m in re.finditer(":[123][sp]", sMorph) ]:
if conj.hasConj(sStem, sTense, sWho):
dSugg[conj.getConj(sStem, sTense, sWho)] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
|
|
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
lTenses = [ m.group(0) for m in re.finditer(":(?:Y|I[pqsf]|S[pq]|K|P)", sMorph) ]
if sWho:
for sTense in lTenses:
if conj.hasConj(sStem, sTense, sWho):
dSugg[conj.getConj(sStem, sTense, sWho)] = ""
else:
for sTense in lTenses:
for sWho in [ m.group(0) for m in re.finditer(":(?:[123][sp]|P|Y)", sMorph) ]:
if conj.hasConj(sStem, sTense, sWho):
dSugg[conj.getConj(sStem, sTense, sWho)] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg[sStem] = ""
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q1") and conj.hasConj(sVerb, ":PQ", ":Q3"):
# We also check if the verb has a feminine form.
# If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable.
dSugg[conj.getConj(sVerb, ":PQ", ":Q1")] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[si]"):
dSugg[e] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
|
|
|
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg[sStem] = ""
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":Q", ":m:s") and conj.hasConj(sVerb, ":Q", ":f:s"):
# We also check if the verb has a feminine form.
# If not, we consider it’s better to not suggest the masculine one, as it can be considered invariable.
dSugg[conj.getConj(sVerb, ":Q", ":m:s")] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[si]"):
dSugg[e] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg[suggPlur(sStem, True)] = ""
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q2"):
dSugg[conj.getConj(sVerb, ":PQ", ":Q2")] = ""
elif conj.hasConj(sVerb, ":PQ", ":Q1"):
sSugg = conj.getConj(sVerb, ":PQ", ":Q1")
# it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural.
if sSugg.endswith("s"):
dSugg[sSugg] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[pi]"):
dSugg[e] = ""
if dSugg:
|
|
|
|
|
|
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg[suggPlur(sStem, True)] = ""
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":Q", ":m:p"):
dSugg[conj.getConj(sVerb, ":Q", ":m:p")] = ""
elif conj.hasConj(sVerb, ":Q", ":m:s"):
sSugg = conj.getConj(sVerb, ":Q", ":m:s")
# it is necessary to filter these flexions, like “succédé” or “agi” that are not masculine plural.
if sSugg.endswith("s"):
dSugg[sSugg] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":m:[pi]"):
dSugg[e] = ""
if dSugg:
|
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg.update(dict.fromkeys(mfsp.getFemForm(sStem, False), ""))
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":PQ", ":Q3"):
dSugg[conj.getConj(sVerb, ":PQ", ":Q3")] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":f:[si]"):
dSugg[e] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
|
|
|
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
|
else:
sStem = cr.getLemmaOfMorph(sMorph)
if mfsp.isMasForm(sStem):
dSugg.update(dict.fromkeys(mfsp.getFemForm(sStem, False), ""))
else:
# a verb
sVerb = cr.getLemmaOfMorph(sMorph)
if conj.hasConj(sVerb, ":Q", ":f:s"):
dSugg[conj.getConj(sVerb, ":Q", ":f:s")] = ""
if bSuggSimil:
for e in phonet.selectSimil(sFlex, ":f:[si]"):
dSugg[e] = ""
if dSugg:
return "|".join(dSugg.keys())
return ""
|
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
|
return dTokenDst["sValue"]
return ""
def hasFemForm (sFlex):
"return True if there is a feminine form of <sFlex>"
for sStem in _oSpellChecker.getLemma(sFlex):
if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"):
return True
if phonet.hasSimil(sFlex, ":f"):
return True
return False
def hasMasForm (sFlex):
"return True if there is a masculine form of <sFlex>"
for sStem in _oSpellChecker.getLemma(sFlex):
if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q1"):
# what has a feminine form also has a masculine form
return True
if phonet.hasSimil(sFlex, ":m"):
return True
return False
|
|
|
|
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
|
return dTokenDst["sValue"]
return ""
def hasFemForm (sFlex):
"return True if there is a feminine form of <sFlex>"
for sStem in _oSpellChecker.getLemma(sFlex):
if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":Q", ":f:s"):
return True
if phonet.hasSimil(sFlex, ":f"):
return True
return False
def hasMasForm (sFlex):
"return True if there is a masculine form of <sFlex>"
for sStem in _oSpellChecker.getLemma(sFlex):
if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":Q", ":m:s"):
# what has a feminine form also has a masculine form
return True
if phonet.hasSimil(sFlex, ":m"):
return True
return False
|