Grammalecte  Check-in [23db08c484]

Overview
Comment:[core] display morphologic data in info()
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | core
Files: files | file ages | folders
SHA3-256: 23db08c484b843184a832d3fac852ec6a61951632e76587b51e0862bd95a0391
User & Date: olr on 2025-09-12 13:18:49
Other Links: manifest | tags
Context
2025-09-12
13:27
[fr] update dictionnaries again (due to wrong previous commit) Leaf check-in: c3a309fb13 user: olr tags: trunk, fr
13:18
[core] display morphologic data in info() check-in: 23db08c484 user: olr tags: trunk, core
13:13
[fr] faux positifs et ajustements check-in: 71ddee21a9 user: olr tags: trunk, fr
Changes

Modified gc_core/py/lang_core/gc_functions.py from [8b75051fd9] to [1771d4c3d2].

155
156
157
158
159
160
161


162
163
164
165
166
167
168
169
170
171
172
173
174
#### Analyse tokens for graph rules

def g_info (dToken):
    "for debugging: retrieve info of word"
    if not dToken:
        echo("> no token")
        return True


    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
    if not lMorph:
        echo("> not in dictionary: " + dToken["sValue"])
        return True
    for sKey, val in dToken.items():
        echo(sKey + ":" + str(val))
    return True


def g_value (dToken, sValues, nLeft=None, nRight=None):
    "test if <dToken['sValue']> is in sValues (each value should be separated with |)"
    sValue = "|"+dToken["sValue"]+"|"  if nLeft is None  else "|"+dToken["sValue"][slice(nLeft, nRight)]+"|"
    if sValue in sValues:







>
>




|
|







155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#### Analyse tokens for graph rules

def g_info (dToken):
    "for debugging: retrieve info of word"
    if not dToken:
        echo("> no token")
        return True
    for sKey, val in dToken.items():
        echo(sKey + ":" + str(val))
    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
    if not lMorph:
        echo("> not in dictionary: " + dToken["sValue"])
        return True
    for sMorph in lMorph:
        echo(sMorph)
    return True


def g_value (dToken, sValues, nLeft=None, nRight=None):
    "test if <dToken['sValue']> is in sValues (each value should be separated with |)"
    sValue = "|"+dToken["sValue"]+"|"  if nLeft is None  else "|"+dToken["sValue"][slice(nLeft, nRight)]+"|"
    if sValue in sValues:

Modified gc_lang/fr/dictionnaire/orthographe/FRANCAIS.dic from [222108d243] to [f615e002da].

4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
appétit/S.()	po:nom	is:mas	di:*	fq:7
appétitif/F.()	po:adj	di:*	fq:5
applaudimètre/S.()	po:nom	is:mas	di:*	fq:4
applaudir/f0p+()	po:v2_itnq__a	di:*	fq:7
applaudissement/S.()	po:nom	is:mas	di:*	fq:6
applaudisseur/Fs()	po:nom	di:*	fq:4
Apple/L'D'Q'	po:npr	is:epi	is:inv	se:soc	se:info	di:*	fq:5
applet/S.()	po:nom	is:mas	et:angl	di:*	fq:4
applette/S.()	po:nom	is:fem	lx:néo	se:info	et:angl	di:*	fq:2
appli/S.()	po:nom	is:fem	lx:abr	se:info	di:*	fq:5
applicabilité/S.()	po:nom	is:fem	di:*	fq:6
applicable/S.()	po:adj	is:epi	di:*	fq:7
applicage/S.()	po:nom	is:mas	di:*	fq:3
applicateur/Fc()	po:nom	di:*	fq:5
applicatif/F.()	po:adj	di:*	fq:5







|







4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
appétit/S.()	po:nom	is:mas	di:*	fq:7
appétitif/F.()	po:adj	di:*	fq:5
applaudimètre/S.()	po:nom	is:mas	di:*	fq:4
applaudir/f0p+()	po:v2_itnq__a	di:*	fq:7
applaudissement/S.()	po:nom	is:mas	di:*	fq:6
applaudisseur/Fs()	po:nom	di:*	fq:4
Apple/L'D'Q'	po:npr	is:epi	is:inv	se:soc	se:info	di:*	fq:5
applet/S.()	po:nom	is:fem	et:angl	di:*	fq:4
applette/S.()	po:nom	is:fem	lx:néo	se:info	et:angl	di:*	fq:2
appli/S.()	po:nom	is:fem	lx:abr	se:info	di:*	fq:5
applicabilité/S.()	po:nom	is:fem	di:*	fq:6
applicable/S.()	po:adj	is:epi	di:*	fq:7
applicage/S.()	po:nom	is:mas	di:*	fq:3
applicateur/Fc()	po:nom	di:*	fq:5
applicatif/F.()	po:adj	di:*	fq:5
51364
51365
51366
51367
51368
51369
51370

51371
51372
51373
51374
51375
51376
51377
mémorialiste/S.()	po:nom	is:epi	di:*	fq:5
mémoriel/F+()	po:adj	di:*	fq:5
mémorisable/S.()	po:adj	is:epi	di:*	fq:4
mémorisation/S.()	po:nom	is:fem	di:*	fq:6
mémoriser/a0p+()	po:v1_it___zz	di:*	fq:6
Memphis/L'D'Q'	po:npr	is:epi	is:inv	se:cité	di:*	fq:6
m’en	po:err	di:*	fq:0

menaçant/F.()	po:adj	di:*	fq:6
menace/S.()	po:nom	is:fem	di:*	fq:7
menacer/a0p+()	po:v1_it___zz	di:*	fq:7
ménade/S.()	po:nom	is:fem	se:myth	et:grec	di:*	fq:4
ménage/S.()	po:nom	is:mas	di:*	fq:7
ménageable/S.()	po:adj	is:epi	di:*	fq:1
ménagement/S.()	po:nom	is:mas	di:*	fq:6







>







51364
51365
51366
51367
51368
51369
51370
51371
51372
51373
51374
51375
51376
51377
51378
mémorialiste/S.()	po:nom	is:epi	di:*	fq:5
mémoriel/F+()	po:adj	di:*	fq:5
mémorisable/S.()	po:adj	is:epi	di:*	fq:4
mémorisation/S.()	po:nom	is:fem	di:*	fq:6
mémoriser/a0p+()	po:v1_it___zz	di:*	fq:6
Memphis/L'D'Q'	po:npr	is:epi	is:inv	se:cité	di:*	fq:6
m’en	po:err	di:*	fq:0
m’y	po:err	di:*	fq:0
menaçant/F.()	po:adj	di:*	fq:6
menace/S.()	po:nom	is:fem	di:*	fq:7
menacer/a0p+()	po:v1_it___zz	di:*	fq:7
ménade/S.()	po:nom	is:fem	se:myth	et:grec	di:*	fq:4
ménage/S.()	po:nom	is:mas	di:*	fq:7
ménageable/S.()	po:adj	is:epi	di:*	fq:1
ménagement/S.()	po:nom	is:mas	di:*	fq:6
79459
79460
79461
79462
79463
79464
79465

79466
79467
79468
79469
79470
79471
79472
temporisateur/Fc()	po:nom	po:adj	di:*	fq:5
temporisation/S.()	po:nom	is:fem	di:*	fq:5
temporiser/a0p+()	po:v1_it___zz	di:*	fq:6
temporo-pariétal/W.()	po:adj	se:anat	di:*	fq:2
temps/L'D'Q'	po:nom	is:mas	is:inv	se:temps	et:lat	di:*	fq:9
temps-réel/L'D'Q'	po:nom	is:mas	is:sg	di:*	fq:3
t’en	po:err	di:*	fq:0

tenable/S.()	po:adj	is:epi	di:*	fq:5
tenace/S.()	po:adj	is:epi	di:*	fq:6
tenacement/L'D'Q'	po:adv	di:*	fq:5
ténacité/S.()	po:nom	is:fem	di:*	fq:6
tenaille/S.()	po:nom	is:fem	di:*	fq:5
tenaillement/S.()	po:nom	is:mas	di:*	fq:3
tenailler/a0p+()	po:v1__t___zz	di:*	fq:5







>







79460
79461
79462
79463
79464
79465
79466
79467
79468
79469
79470
79471
79472
79473
79474
temporisateur/Fc()	po:nom	po:adj	di:*	fq:5
temporisation/S.()	po:nom	is:fem	di:*	fq:5
temporiser/a0p+()	po:v1_it___zz	di:*	fq:6
temporo-pariétal/W.()	po:adj	se:anat	di:*	fq:2
temps/L'D'Q'	po:nom	is:mas	is:inv	se:temps	et:lat	di:*	fq:9
temps-réel/L'D'Q'	po:nom	is:mas	is:sg	di:*	fq:3
t’en	po:err	di:*	fq:0
t’y	po:err	di:*	fq:0
tenable/S.()	po:adj	is:epi	di:*	fq:5
tenace/S.()	po:adj	is:epi	di:*	fq:6
tenacement/L'D'Q'	po:adv	di:*	fq:5
ténacité/S.()	po:nom	is:fem	di:*	fq:6
tenaille/S.()	po:nom	is:fem	di:*	fq:5
tenaillement/S.()	po:nom	is:mas	di:*	fq:3
tenailler/a0p+()	po:v1__t___zz	di:*	fq:5
86979
86980
86981
86982
86983
86984
86985

86986
86987
86988
86989
86990
86991
86992
paralimbique/S.()	po:adj	is:epi	se:anat	di:*
perfluoré/F.()	po:nom	po:adj	se:chim	di:*
photophérèse/S.()	po:nom	is:fem	se:méd	di:*
phytoplasme/S.()	po:nom	is:mas	se:bio	et:grec	di:*
plaçable/S.()	po:adj	is:epi	di:*
pluricentenaire/S.()	po:adj	is:epi	se:temps	di:*
proxiphotographie/S.()	po:nom	is:fem	se:image	di:*

résumable/S.()	po:adj	is:epi	se:litt	di:*
résurrecteur/Fc()	po:adj	se:reli	di:*
riparien/F+()	po:adj	se:géogr	di:*
ripisylve/S.()	po:nom	is:fem	se:sylvi	di:*
ronin/S.()	po:nom	is:mas	se:hist	et:jap	di:*
Rosalinde/L'D'Q'	po:prn	is:fem	is:inv	di:*
sacoglosse/S.()	po:nom	is:fem	se:zool	di:*







>







86981
86982
86983
86984
86985
86986
86987
86988
86989
86990
86991
86992
86993
86994
86995
paralimbique/S.()	po:adj	is:epi	se:anat	di:*
perfluoré/F.()	po:nom	po:adj	se:chim	di:*
photophérèse/S.()	po:nom	is:fem	se:méd	di:*
phytoplasme/S.()	po:nom	is:mas	se:bio	et:grec	di:*
plaçable/S.()	po:adj	is:epi	di:*
pluricentenaire/S.()	po:adj	is:epi	se:temps	di:*
proxiphotographie/S.()	po:nom	is:fem	se:image	di:*
recréditer/a0p+()	po:v1__t___zz	di:*
résumable/S.()	po:adj	is:epi	se:litt	di:*
résurrecteur/Fc()	po:adj	se:reli	di:*
riparien/F+()	po:adj	se:géogr	di:*
ripisylve/S.()	po:nom	is:fem	se:sylvi	di:*
ronin/S.()	po:nom	is:mas	se:hist	et:jap	di:*
Rosalinde/L'D'Q'	po:prn	is:fem	is:inv	di:*
sacoglosse/S.()	po:nom	is:fem	se:zool	di:*

Modified gc_lang/fr/modules/tests_modules.py from [4ad642ab21] to [5dcbe6a7fd].

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
            self.assertTrue(self.oSpellChecker.lookup(sWord), sWord)

    def test_lookup_failed (self):
        for sWord in ["Branche", "BRANCHE", "BranchE", "BRanche", "BRAnCHE", "émilie"]:
            self.assertFalse(self.oSpellChecker.lookup(sWord), sWord)

    def test_isvalidtoken (self):
        for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd'hui", "aujourd’hui", "Aujourd'hui", "Aujourd’hui", "je-suis-vraiment-fatigué", ""]:
            self.assertTrue(self.oSpellChecker.isValidToken(sWord), sWord)

    def test_isvalid (self):
        for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd’hui", "Aujourd’hui"]:
            self.assertTrue(self.oSpellChecker.isValid(sWord), sWord)

    def test_isvalid_failed (self):
        for sWord in ["BranchE", "BRanche", "BRAnCHE", "émilie", "éMILIE", "émiLie", "aujourd'hui", "Aujourd'hui", ]:
            self.assertFalse(self.oSpellChecker.isValid(sWord), sWord)

    def test_suggest (self):
        for sWrong, sSugg in [
            ("chassis", "châssis"),
            ("francais", "français"),
            ("déelirranttesss", "délirantes"),







|



|



|







39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
            self.assertTrue(self.oSpellChecker.lookup(sWord), sWord)

    def test_lookup_failed (self):
        for sWord in ["Branche", "BRANCHE", "BranchE", "BRanche", "BRAnCHE", "émilie"]:
            self.assertFalse(self.oSpellChecker.lookup(sWord), sWord)

    def test_isvalidtoken (self):
        for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd'hui", "aujourd’hui", "Aujourd'hui", "Aujourd’hui", "je-suis-vraiment-fatigué", "donne-m’en", "tiens-t’y"]:
            self.assertTrue(self.oSpellChecker.isValidToken(sWord), sWord)

    def test_isvalid (self):
        for sWord in ["Branche", "branche", "BRANCHE", "Émilie", "ÉMILIE", "aujourd’hui", "Aujourd’hui", "M’EN", "T’Y"]:
            self.assertTrue(self.oSpellChecker.isValid(sWord), sWord)

    def test_isvalid_failed (self):
        for sWord in ["BranchE", "BRanche", "BRAnCHE", "émilie", "éMILIE", "émiLie", "aujourd'hui", "Aujourd'hui"]:
            self.assertFalse(self.oSpellChecker.isValid(sWord), sWord)

    def test_suggest (self):
        for sWrong, sSugg in [
            ("chassis", "châssis"),
            ("francais", "français"),
            ("déelirranttesss", "délirantes"),