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
|
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
|
+
-
-
-
+
+
+
+
-
-
+
+
|
//// GRAMMAR CHECKING ENGINE PLUGIN: Suggestion mechanisms
if (typeof(exports) !== 'undefined') {
const conj = require("resource://grammalecte/fr/conj.js");
const mfsp = require("resource://grammalecte/fr/mfsp.js");
const phonet = require("resource://grammalecte/fr/phonet.js");
var conj = require("resource://grammalecte/fr/conj.js");
var mfsp = require("resource://grammalecte/fr/mfsp.js");
var phonet = require("resource://grammalecte/fr/phonet.js");
}
//// verbs
function suggVerb (sFlex, sWho, funcSugg2=null) {
// we don’t check if word exists in _dAnalyses, for it is assumed it has been done before
let aSugg = new Set();
for (let sStem of stem(sFlex)) {
let tTags = conj._getTags(sStem);
if (tTags) {
// we get the tense
let aTense = new Set();
for (let sMorph of _dAnalyses.gl_get(sFlex, [])) {
let m;
let zVerb = new RegExp (sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K))", "g");
while (m = zVerb.exec(sMorph)) {
let zVerb = new RegExp (">"+sStem+" .*?(:(?:Y|I[pqsf]|S[pq]|K))", "g");
while ((m = zVerb.exec(sMorph)) !== null) {
// stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer)
if (m) {
if (m[1] === ":Y") {
aTense.add(":Ip");
aTense.add(":Iq");
aTense.add(":Is");
} else if (m[1] === ":P") {
|
︙ | | |
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
|
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
|
-
+
|
function suggPlur (sFlex, sWordToAgree=null) {
// returns plural forms assuming sFlex is singular
if (sWordToAgree) {
if (!_dAnalyses.has(sWordToAgree) && !_storeMorphFromFSA(sWordToAgree)) {
return "";
}
let sGender = cr.getGender(_dAnalyses.gl_get(sWordToAgree, []));
let sGender = cregex.getGender(_dAnalyses.gl_get(sWordToAgree, []));
if (sGender == ":m") {
return suggMasPlur(sFlex);
} else if (sGender == ":f") {
return suggFemPlur(sFlex);
}
}
let aSugg = new Set();
|
︙ | | |
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
|
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
|
-
+
-
+
|
let aSugg = new Set();
for (let sMorph of _dAnalyses.gl_get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggSing(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
mfsp.getMasForm(sStem, false).forEach(function(x) { aSugg.add(x); });
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q1") && 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.
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q1"));
}
}
}
|
︙ | | |
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
|
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
|
-
+
-
+
|
let aSugg = new Set();
for (let sMorph of _dAnalyses.gl_get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":m") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
mfsp.getMasForm(sStem, true).forEach(function(x) { aSugg.add(x); });
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q2")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q2"));
} else if (conj.hasConj(sVerb, ":PQ", ":Q1")) {
let 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")) {
aSugg.add(sSugg);
|
︙ | | |
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
|
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
|
-
+
-
+
|
let aSugg = new Set();
for (let sMorph of _dAnalyses.gl_get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":f") || sMorph.includes(":e")) {
aSugg.add(suggSing(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
aSugg.add(sStem);
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q3")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q3"));
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":f:[si]")) {
|
︙ | | |
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
|
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
|
-
+
-
+
|
let aSugg = new Set();
for (let sMorph of _dAnalyses.gl_get(sFlex, [])) {
if (!sMorph.includes(":V")) {
// not a verb
if (sMorph.includes(":f") || sMorph.includes(":e")) {
aSugg.add(suggPlur(sFlex));
} else {
let sStem = cr.getLemmaOfMorph(sMorph);
let sStem = cregex.getLemmaOfMorph(sMorph);
if (mfsp.isFemForm(sStem)) {
aSugg.add(sStem+"s");
}
}
} else {
// a verb
let sVerb = cr.getLemmaOfMorph(sMorph);
let sVerb = cregex.getLemmaOfMorph(sMorph);
if (conj.hasConj(sVerb, ":PQ", ":Q4")) {
aSugg.add(conj.getConj(sVerb, ":PQ", ":Q4"));
}
}
}
if (bSuggSimil) {
for (let e of phonet.selectSimil(sFlex, ":f:[pi]")) {
|
︙ | | |