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
|
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
|
-
-
-
+
|
// Grammalecte - Compiled regular expressions
/* jshint esversion:6 */
/* jslint esversion:6 */
var cregex = {
///// Lemme
_zLemma: new RegExp(">([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"),
///// Masculin / féminin / singulier / pluriel
_zGender: new RegExp(":[mfe]"),
_zNumber: new RegExp(":[spi]"),
_zGenderNumber: new RegExp(":[mfe]:[spi]"),
///// Nom et adjectif
_zNA: new RegExp(":[NA]"),
//// nombre
_zNAs: new RegExp(":[NA].*:s"),
_zNAp: new RegExp(":[NA].*:p"),
_zNAi: new RegExp(":[NA].*:i"),
_zNAsi: new RegExp(":[NA].*:[si]"),
_zNApi: new RegExp(":[NA].*:[pi]"),
//// genre
_zNAm: new RegExp(":[NA].*:m"),
_zNAf: new RegExp(":[NA].*:f"),
_zNAe: new RegExp(":[NA].*:e"),
_zNAme: new RegExp(":[NA].*:[me]"),
_zNAfe: new RegExp(":[NA].*:[fe]"),
//// nombre et genre
// singuilier
// singulier
_zNAms: new RegExp(":[NA].*:m.*:s"),
_zNAfs: new RegExp(":[NA].*:f.*:s"),
_zNAes: new RegExp(":[NA].*:e.*:s"),
_zNAmes: new RegExp(":[NA].*:[me].*:s"),
_zNAfes: new RegExp(":[NA].*:[fe].*:s"),
// singulier et invariable
|
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
|
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
|
-
-
-
-
+
+
+
+
-
-
-
-
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
///// FONCTIONS
getLemmaOfMorph: function (sMorph) {
return this._zLemma.exec(sMorph)[1];
},
agreement: function (l1, l2) {
// check number agreement
if (!this.mbInv(l1) && !this.mbInv(l2)) {
if (this.mbSg(l1) && !this.mbSg(l2)) {
return false;
// returns True if agreement in gender and number is possible between morphologies <l1> and <l2>
let [sGender1, sNumber1] = this.getGenderNumber(l1);
let [sGender2, sNumber2] = this.getGenderNumber(l2);
if (sNumber1 !== ":i" && sNumber2 !== ":i" && sNumber1 !== sNumber2) {
}
if (this.mbPl(l1) && !this.mbPl(l2)) {
return false;
}
return false;
}
}
// check gender agreement
if (sGender1 !== ":e" && sGender2 !== ":e" && sGender1 !== sGender2) {
if (this.mbEpi(l1) || this.mbEpi(l2)) {
return true;
}
if (this.isMas(l1) && !this.mbMas(l2)) {
return false;
}
if (this.isFem(l1) && !this.mbFem(l2)) {
return false;
}
return true;
},
checkConjVerb: function (lMorph, sReqConj) {
return lMorph.some(s => s.includes(sReqConj));
},
getGender: function (lMorph) {
// returns gender of word (':m', ':f', ':e' or empty string).
let sGender = "";
for (let sMorph of lMorph) {
let m = this._zGender.exec(sMorph);
if (m) {
if (!sGender) {
sGender = m[0];
} else if (sGender != m[0]) {
return ":e";
}
}
}
return sGender;
},
getNumber: function (lMorph) {
// returns number of word (':s', ':p', ':i' or empty string).
let sNumber = "";
for (let sMorph of lMorph) {
let m = this._zNumber.exec(sMorph);
if (m) {
if (!sNumber) {
sNumber = m[0];
} else if (sNumber != m[0]) {
return ":i";
}
}
}
return sNumber;
},
getGenderNumber: function (lMorph) {
// returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)
let sGender = "";
let sNumber = "";
for (let sMorph of lMorph) {
let m = this._zGenderNumber.exec(sMorph);
if (m) {
|
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
251
252
253
254
255
256
257
258
259
260
261
262
263
264
|
-
-
|
return lMorph.some(s => this._zNPm.test(s));
}
};
if (typeof(exports) !== 'undefined') {
exports._zLemma = cregex._zLemma;
exports._zGender = cregex._zGender;
exports._zNumber = cregex._zNumber;
exports._zNA = cregex._zNA;
exports._zNAs = cregex._zNAs;
exports._zNAp = cregex._zNAp;
exports._zNAi = cregex._zNAi;
exports._zNAsi = cregex._zNAsi;
exports._zNApi = cregex._zNApi;
exports._zNAm = cregex._zNAm;
|
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
|
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
|
-
+
+
-
-
|
exports._zNnotA = cregex._zNnotA;
exports._zPNnotA = cregex._zPNnotA;
exports._zNP = cregex._zNP;
exports._zNPm = cregex._zNPm;
exports._zNPf = cregex._zNPf;
exports._zNPe = cregex._zNPe;
exports.getLemmaOfMorph = cregex.getLemmaOfMorph;
exports.checkAgreement = cregex.checkAgreement;
exports.agreement = cregex.agreement;
exports.getGenderNumber = cregex.getGenderNumber;
exports.checkConjVerb = cregex.checkConjVerb;
exports.getGender = cregex.getGender;
exports.getNumber = cregex.getNumber;
exports.isNom = cregex.isNom;
exports.isNomNotAdj = cregex.isNomNotAdj;
exports.isAdj = cregex.isAdj;
exports.isNomAdj = cregex.isNomAdj;
exports.isNomVconj = cregex.isNomVconj;
exports.isInv = cregex.isInv;
exports.isSg = cregex.isSg;
|