1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
"""
Grammalecte - Compiled regular expressions
"""
import re
#### Lemme
Lemma = re.compile(r"^>(\w[\w-]*)")
#### Analyses
Gender = re.compile(":[mfe]")
Number = re.compile(":[spi]")
GenderNumber = re.compile(":[mfe]:[spi]")
#### Nom et adjectif
NA = re.compile(":[NA]")
## nombre
NAs = re.compile(":[NA].*:s")
|
<
<
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
"""
Grammalecte - Compiled regular expressions
"""
import re
#### Lemme
Lemma = re.compile(r"^>(\w[\w-]*)")
#### Analyses
GenderNumber = re.compile(":[mfe]:[spi]")
#### Nom et adjectif
NA = re.compile(":[NA]")
## nombre
NAs = re.compile(":[NA].*:s")
|
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
|
def getLemmaOfMorph (s):
"return lemma in morphology <s>"
return Lemma.search(s).group(1)
def agreement (l1, l2):
"returns True if agreement in gender and number is possible between morphologies <l1> and <l2>"
# check number agreement
if not mbInv(l1) and not mbInv(l2):
if mbSg(l1) and not mbSg(l2):
return False
if mbPl(l1) and not mbPl(l2):
return False
# check gender agreement
if mbEpi(l1) or mbEpi(l2):
return True
if isMas(l1) and not mbMas(l2):
return False
if isFem(l1) and not mbFem(l2):
return False
return True
def checkConjVerb (lMorph, sReqConj):
"returns True if <sReqConj> in <lMorph>"
return any(sReqConj in s for s in lMorph)
def getGender (lMorph):
"returns gender of word (':m', ':f', ':e' or empty string)."
sGender = ""
for sMorph in lMorph:
m = Gender.search(sMorph)
if m:
if not sGender:
sGender = m.group(0)
elif sGender != m.group(0):
return ":e"
return sGender
def getNumber (lMorph):
"returns number of word (':s', ':p', ':i' or empty string)."
sNumber = ""
for sMorph in lMorph:
m = Number.search(sMorph)
if m:
if not sNumber:
sNumber = m.group(0)
elif sNumber != m.group(0):
return ":i"
return sNumber
def getGenderNumber (lMorph):
"returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)"
sGender = ""
sNumber = ""
for sMorph in lMorph:
m = GenderNumber.search(sMorph)
if m:
|
|
|
|
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
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
|
def getLemmaOfMorph (s):
"return lemma in morphology <s>"
return Lemma.search(s).group(1)
def agreement (l1, l2):
"returns True if agreement in gender and number is possible between morphologies <l1> and <l2>"
sGender1, sNumber1 = getGenderNumber(l1)
sGender2, sNumber2 = getGenderNumber(l2)
if sNumber1 != ":i" and sNumber2 != ":i" and sNumber1 != sNumber2:
return False
if sGender1 != ":e" and sGender2 != ":e" and sGender1 != sGender2:
return False
return True
def checkConjVerb (lMorph, sReqConj):
"returns True if <sReqConj> in <lMorph>"
return any(sReqConj in s for s in lMorph)
def getGenderNumber (lMorph):
"returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)"
sGender = ""
sNumber = ""
for sMorph in lMorph:
m = GenderNumber.search(sMorph)
if m:
|