Grammalecte  Check-in [42ae6ca0ca]

Overview
Comment:[fr] ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 42ae6ca0ca4717ac9f25526195102206d3df20b65b4a4970a4bcbd6d1ba68b8e
User & Date: olr on 2020-11-25 15:09:23
Other Links: manifest | tags
Context
2020-11-25
18:26
[fr] mise à jour du dictionnaire check-in: 303694c201 user: olr tags: trunk, fr
15:09
[fr] ajustements check-in: 42ae6ca0ca user: olr tags: trunk, fr
2020-11-24
21:27
[fr] corrections des messages check-in: b568531f02 user: olr tags: trunk, fr
Changes

Modified gc_core/py/lang_core/tests_core.py from [36a2155509] to [9b4b6039ba].

140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168

169


170
171
172
173
174
175
176
177
178
179
180
        lAllSugg = []
        for dErr in sorted(aErrs, key=lambda d: d["nStart"]):
            sRes = sRes[:dErr["nStart"]] + "~" * (dErr["nEnd"] - dErr["nStart"]) + sRes[dErr["nEnd"]:]
            sListErr += "    * {sLineId} / {sRuleId}  at  {nStart}:{nEnd}\n".format(**dErr)
            lAllSugg.append("|".join(dErr["aSuggestions"]))
            self._aTestedRules.add(dErr["sRuleId"].rstrip("0123456789"))
            # test messages
            if False:
                aGramErrs = gc_engine.parse(purgeMessage(dErr["sMessage"]))
                aGramErrs = [ dMsgErr  for dMsgErr in sorted(aGramErrs, key=lambda d: d["nStart"])  if self._zRuleEnd.sub("", dMsgErr["sRuleId"]) != self._zRuleEnd.sub("", dErr["sRuleId"]) ]
                aSpellErrs = self._oSpellChecker.parseParagraph(re.sub("‹\\w+›", lambda m: " " * len(m.group(0)), dErr["sMessage"]))
                if aGramErrs or aSpellErrs or "<start>" in dErr["sMessage"] or "<end>" in dErr["sMessage"]:
                    print("\n# Error in: <" + dErr["sMessage"] + ">\n    " + dErr["sLineId"] + " / " + dErr["sRuleId"])
                    for dMsgErr in aGramErrs:
                        print("        error: {sLineId} / {sRuleId}  at  {nStart}:{nEnd}".format(**dMsgErr))
                    for dMsgErr in aSpellErrs:
                        print("        spelling mistake: <{sValue}>  at {nStart}:{nEnd}".format(**dMsgErr))
        return sRes, sListErr, "|||".join(lAllSugg)

    def _getExpectedErrors (self, sLine):
        sRes = " " * len(sLine)
        for i, m in enumerate(self._zError.finditer(sLine)):
            nStart = m.start() - (4 * i)
            nEnd = m.end() - (4 * (i+1))
            sRes = sRes[:nStart] + "~" * (nEnd - nStart) + sRes[nEnd:-4]
        return sRes


def purgeMessage (sMessage):

    sMessage = sMessage.replace("l’ ", "l’").replace("d’ ", "d’").replace("m’ ", "m’").replace("t’ ", "t’").replace("s’ ", "s’").replace("qu’ ", "qu’")


    sMessage = sMessage.replace("L’ ", "L’").replace("D’ ", "D’").replace("M’ ", "M’").replace("T’ ", "T’").replace("S’ ", "S’").replace("QU’ ", "QU’")
    return sMessage


def main():
    "start function"
    unittest.main()


if __name__ == '__main__':
    main()







<
|
|
|
|
|
|
|
|
|












>
|
>
>
|










140
141
142
143
144
145
146

147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
        lAllSugg = []
        for dErr in sorted(aErrs, key=lambda d: d["nStart"]):
            sRes = sRes[:dErr["nStart"]] + "~" * (dErr["nEnd"] - dErr["nStart"]) + sRes[dErr["nEnd"]:]
            sListErr += "    * {sLineId} / {sRuleId}  at  {nStart}:{nEnd}\n".format(**dErr)
            lAllSugg.append("|".join(dErr["aSuggestions"]))
            self._aTestedRules.add(dErr["sRuleId"].rstrip("0123456789"))
            # test messages

            aGramErrs = gc_engine.parse(purgeMessage(dErr["sMessage"]))
            aGramErrs = [ dMsgErr  for dMsgErr in sorted(aGramErrs, key=lambda d: d["nStart"])  if self._zRuleEnd.sub("", dMsgErr["sRuleId"]) != self._zRuleEnd.sub("", dErr["sRuleId"]) ]
            aSpellErrs = self._oSpellChecker.parseParagraph(re.sub("‹[\\w ’-]+›", lambda m: " " * len(m.group(0)), dErr["sMessage"]))
            if aGramErrs or aSpellErrs or "<start>" in dErr["sMessage"] or "<end>" in dErr["sMessage"]:
                print("\n# Error in: <" + dErr["sMessage"] + ">\n    " + dErr["sLineId"] + " / " + dErr["sRuleId"])
                for dMsgErr in aGramErrs:
                    print("        error: {sLineId} / {sRuleId}  at  {nStart}:{nEnd}".format(**dMsgErr))
                for dMsgErr in aSpellErrs:
                    print("        spelling mistake: <{sValue}>  at {nStart}:{nEnd}".format(**dMsgErr))
        return sRes, sListErr, "|||".join(lAllSugg)

    def _getExpectedErrors (self, sLine):
        sRes = " " * len(sLine)
        for i, m in enumerate(self._zError.finditer(sLine)):
            nStart = m.start() - (4 * i)
            nEnd = m.end() - (4 * (i+1))
            sRes = sRes[:nStart] + "~" * (nEnd - nStart) + sRes[nEnd:-4]
        return sRes


def purgeMessage (sMessage):
    for sToReplace, sReplacement in [
        ("l’ ", "l’"), ("d’ ", "d’"), ("n’ ", "n’"), ("j’ ", "j’"), ("m’ ", "m’"), ("t’ ", "t’"), ("s’ ", "s’"), ("qu’ ", "qu’"),
        ("L’ ", "L’"), ("D’ ", "D’"), ("N’ ", "N’"), ("J’ ", "J’"), ("M’ ", "M’"), ("T’ ", "T’"), ("S’ ", "S’"), ("QU’ ", "QU’")
    ]:
        sMessage = sMessage.replace(sToReplace, sReplacement)
    return sMessage


def main():
    "start function"
    unittest.main()


if __name__ == '__main__':
    main()

Modified gc_lang/fr/rules.grx from [f8dd70985a] to [9bf21196ef].

1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
!!!
!!!
!!! Purge de la phrase                                                                            !!
!!!
!!!

__tag_mots_entre_guillemets__
    «  *WORD  »
        <<- space_after(\1, 0, 1) and space_after(\2, 0, 1) /2>> eg1mot

    «  *WORD  *WORD
        <<- space_after(\1, 0, 1) /2:0>> egxmot

    *WORD  *WORD  »
        <<- space_after(\2, 0, 1) /1:2>> egxmot

    [“|”|"]     *WORD   [“|”|"]
    [‘|'|’|`]   *WORD   [‘|'|’|`]
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) /2>> eg1mot

    ["|“|”]  *WORD  *WORD
        <<- space_after(\1, 0, 0) /2:0>> egxmot

    *WORD  *WORD  ["|“|”]
        <<- space_after(\2, 0, 0) /1:2>> egxmot


__purge_guillemets__
    [«|»|“|”|"|„|`]
        <<- ~>> *








|


|


|


|
|


|


|







1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
!!!
!!!
!!! Purge de la phrase                                                                            !!
!!!
!!!

__tag_mots_entre_guillemets__
    «  [*WORD|*WORD_ELIDED]  »
        <<- space_after(\1, 0, 1) and space_after(\2, 0, 1) /2>> eg1mot

    «  [*WORD|*WORD_ELIDED]  [*WORD|*WORD_ELIDED]
        <<- space_after(\1, 0, 1) /2:0>> egxmot

    [*WORD|*WORD_ELIDED]  [*WORD|*WORD_ELIDED]  »
        <<- space_after(\2, 0, 1) /1:2>> egxmot

    [“|”|"]     [*WORD|*WORD_ELIDED]   [“|”|"]
    [‘|'|’|`]   [*WORD|*WORD_ELIDED]   [‘|'|’|`]
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) /2>> eg1mot

    ["|“|”]  [*WORD|*WORD_ELIDED]  *[*WORD|*WORD_ELIDED]
        <<- space_after(\1, 0, 0) /2:0>> egxmot

    [*WORD|*WORD_ELIDED]  [*WORD|*WORD_ELIDED]  ["|“|”]
        <<- space_after(\2, 0, 0) /1:2>> egxmot


__purge_guillemets__
    [«|»|“|”|"|„|`]
        <<- ~>> *

3155
3156
3157
3158
3159
3160
3161




3162
3163
3164
3165
3166
3167
3168
    [<start>|,]  «          $:Q         »          est [un|le]     participe passé
    [<start>|,]  [‘|'|’|`]  $:Q         [‘|'|’|`]  est [un|le]     participe passé
    [<start>|,]  ‹          $:Q         ›          est [un|le]     participe passé
    [<start>|,]  [“|”|"]    $:V         [“|”|"]    est [une|la]    forme verbale
    [<start>|,]  «          $:V         »          est [une|la]    forme verbale
    [<start>|,]  [‘|'|’|`]  $:V         [‘|'|’|`]  est [une|la]    forme verbale
    [<start>|,]  ‹          $:V         ›          est [une|la]    forme verbale




    [<start>|,]  [“|”|"]    [$:B|*NUM]  [“|”|"]    est [un|le]     nombre
    [<start>|,]  «          [$:B|*NUM]  »          est [un|le]     nombre
    [<start>|,]  [‘|'|’|`]  [$:B|*NUM]  [‘|'|’|`]  est [un|le]     nombre
    [<start>|,]  ‹          [$:B|*NUM]  ›          est [un|le]     nombre
    [<start>|,]  [“|”|"]    *PUNC       [“|”|"]    est [un|le]     signe de ponctuation
    [<start>|,]  «          *PUNC       »          est [un|le]     signe de ponctuation
    [<start>|,]  [‘|'|’|`]  *PUNC       [‘|'|’|`]  est [un|le]     signe de ponctuation







>
>
>
>







3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
    [<start>|,]  «          $:Q         »          est [un|le]     participe passé
    [<start>|,]  [‘|'|’|`]  $:Q         [‘|'|’|`]  est [un|le]     participe passé
    [<start>|,]  ‹          $:Q         ›          est [un|le]     participe passé
    [<start>|,]  [“|”|"]    $:V         [“|”|"]    est [une|la]    forme verbale
    [<start>|,]  «          $:V         »          est [une|la]    forme verbale
    [<start>|,]  [‘|'|’|`]  $:V         [‘|'|’|`]  est [une|la]    forme verbale
    [<start>|,]  ‹          $:V         ›          est [une|la]    forme verbale
    [<start>|,]  [“|”|"]    *WORD       [“|”|"]    est [une|la]    forme verbale interrogative
    [<start>|,]  «          *WORD       »          est [une|la]    forme verbale interrogative
    [<start>|,]  [‘|'|’|`]  *WORD       [‘|'|’|`]  est [une|la]    forme verbale interrogative
    [<start>|,]  ‹          *WORD       ›          est [une|la]    forme verbale interrogative
    [<start>|,]  [“|”|"]    [$:B|*NUM]  [“|”|"]    est [un|le]     nombre
    [<start>|,]  «          [$:B|*NUM]  »          est [un|le]     nombre
    [<start>|,]  [‘|'|’|`]  [$:B|*NUM]  [‘|'|’|`]  est [un|le]     nombre
    [<start>|,]  ‹          [$:B|*NUM]  ›          est [un|le]     nombre
    [<start>|,]  [“|”|"]    *PUNC       [“|”|"]    est [un|le]     signe de ponctuation
    [<start>|,]  «          *PUNC       »          est [un|le]     signe de ponctuation
    [<start>|,]  [‘|'|’|`]  *PUNC       [‘|'|’|`]  est [un|le]     signe de ponctuation
5341
5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
    >arrière >petit >nièce
        <<- /tu/ ->> arrière-petite-nièce|arrière-petites-nièces    && Mettez des traits d’union.

    au jour d’ [hui+s|oui|huit]
    [au-jour-d’hui+s]
    au-jour d’ [hui+s|oui|huit]
        <<- /tu/ ->> aujourd’hui
        && Soudez. “Aujourd’hui” : agglutination de l’ancienne locution au jour d’hui, dont le terme ‹hui› signifiait autrefois “en ce jour”.|https://fr.wiktionary.org/wiki/aujourd%E2%80%99hui

    [basket|volley] ball
        <<- /tu/ ->> \1-\2                                      && Il manque un trait d’union.

    bas [>côté|coté|cotés]
        <<- /tu/ morph(<1 , ":D") ->> bas-côté|bas-côtés        && Il manque un trait d’union.








|







5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
    >arrière >petit >nièce
        <<- /tu/ ->> arrière-petite-nièce|arrière-petites-nièces    && Mettez des traits d’union.

    au jour d’ [hui+s|oui|huit]
    [au-jour-d’hui+s]
    au-jour d’ [hui+s|oui|huit]
        <<- /tu/ ->> aujourd’hui
        && Soudez. “Aujourd’hui” : agglutination de l’ancienne locution au jour d’hui, dont le terme ‹hui› signifiait autrefois “en ce jour”.|https://fr.wiktionary.org/wiki/aujourd%E2%80%99hui

    [basket|volley] ball
        <<- /tu/ ->> \1-\2                                      && Il manque un trait d’union.

    bas [>côté|coté|cotés]
        <<- /tu/ morph(<1 , ":D") ->> bas-côté|bas-côtés        && Il manque un trait d’union.

6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946

6947
6948
6949
6950
6951
6952
6953
        <<- /conj/ --1>> =suggVerb(\-1, ":3s")                                                      && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [ce|c’]                         @>être/:V¬:(?:N|A|3[sp]|P|Q|Ov)
    [ce|c’]  [le|l’]                @>être/:V¬:(?:N|A|3s|P|Q|Ov)
    [ce|c’]  [ne|n’]  ?[le|l’|en]¿  @>être/:V¬:(?:3[sp]|P|Q|Ov)
        <<- /conj/ --1>> =suggVerb(\-1, ":3s")                                                      && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [c’|ç’]                         @:¬:(?:[123][sp]|Y|P|Ov|X)|>que/
        <<- /conf/ -2>> =suggSimil(\2, ":3s", False)                                                && Incohérence avec « \1 » : « \2 » devrait être un verbe.

TEST: pour toi qui sais tout, ce ne le {{fus}} pas
TEST: ce secret tu, ce {{devais}} être un cauchemar.
TEST: Ce peut être un chien ou un chat.
TEST: ce ne peut être aussi stupide.
TEST: ce dut être un cauchemar.
TEST: ce devra être un véritable expert pour accomplir une tâche aussi difficile.
TEST: ce voudrait être le plus grand bal de tous les temps.
TEST: ce ne pourrait être une chose aussi banale.
TEST: ce serait une honte d’échouer une fois de plus à un test aussi élémentaire.
TEST: ce ne saurait être cet homme…
TEST: C’en est trop !
TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.



__conj_c_en!6__
    c’ en  *WORD
        <<- /conj/ morph(\3, ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/:V", ":3s")
        -3>> =suggVerb(\3, ":3s")                                                                   && Conjugaison erronée. Accord avec “c’en”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conf/ morph(\3, ":[YP]") or morph(\3, ":V", ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/")







|
|













>







6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
        <<- /conj/ --1>> =suggVerb(\-1, ":3s")                                                      && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [ce|c’]                         @>être/:V¬:(?:N|A|3[sp]|P|Q|Ov)
    [ce|c’]  [le|l’]                @>être/:V¬:(?:N|A|3s|P|Q|Ov)
    [ce|c’]  [ne|n’]  ?[le|l’|en]¿  @>être/:V¬:(?:3[sp]|P|Q|Ov)
        <<- /conj/ --1>> =suggVerb(\-1, ":3s")                                                      && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [c’|ç’]                         @:¬:(?:[123][sp]|Y|P|Ov|X)|>(?:que|[bcdfgjklmnpqrstvwxz].*:N.*:m:[si])/
        <<- /conf/ not tag(\1, "eg1mot") -2>> =suggSimil(\2, ":3s", False)                          && Incohérence avec « \1 » : « \2 » devrait être un verbe.

TEST: pour toi qui sais tout, ce ne le {{fus}} pas
TEST: ce secret tu, ce {{devais}} être un cauchemar.
TEST: Ce peut être un chien ou un chat.
TEST: ce ne peut être aussi stupide.
TEST: ce dut être un cauchemar.
TEST: ce devra être un véritable expert pour accomplir une tâche aussi difficile.
TEST: ce voudrait être le plus grand bal de tous les temps.
TEST: ce ne pourrait être une chose aussi banale.
TEST: ce serait une honte d’échouer une fois de plus à un test aussi élémentaire.
TEST: ce ne saurait être cet homme…
TEST: C’en est trop !
TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
TEST: c’con est trop con


__conj_c_en!6__
    c’ en  *WORD
        <<- /conj/ morph(\3, ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/:V", ":3s")
        -3>> =suggVerb(\3, ":3s")                                                                   && Conjugaison erronée. Accord avec “c’en”. Le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conf/ morph(\3, ":[YP]") or morph(\3, ":V", ">(?:être|devoir|devenir|pouvoir|vouloir|savoir)/")
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
__conf_se_ceux_ce!6__
    ce  @:V[123].*:(?:Y|[123][sp])¬:[NAGM]|>(?:devoir|pouvoir|sembler|vouloir)/
        <<- /conf/ not \1.isupper() and \2.islower() and not (value(<1, "|pour|") and value(\2, "|faire|"))
        -1>> se                                         && Confusion : « \2 » est une forme verbale. Exemples : ce bâtiment, se perdre.

    ce  [/-il|/-ils|/-elle|/-elles|/-iel|/-iels|/-on]
        <<- /conf/ not \1.isupper() and \2.islower()
        -1>> se                                         && Confusion : « \2 » est une forme verbale. Exemples : ce bâtiment, se perdre.

    [ce|c’] qui ce passe
        <<- /conf/ -3>> se                              && Confusion : « \4 » est une forme verbale. Exemples : ce bâtiment, se perdre.

    [ne|n’] ce
        <<- /conf/ -2>> se                              && Confusion. Ce chien, ce chat… Se demander, se croire…








|







9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346
9347
__conf_se_ceux_ce!6__
    ce  @:V[123].*:(?:Y|[123][sp])¬:[NAGM]|>(?:devoir|pouvoir|sembler|vouloir)/
        <<- /conf/ not \1.isupper() and \2.islower() and not (value(<1, "|pour|") and value(\2, "|faire|"))
        -1>> se                                         && Confusion : « \2 » est une forme verbale. Exemples : ce bâtiment, se perdre.

    ce  [/-il|/-ils|/-elle|/-elles|/-iel|/-iels|/-on]
        <<- /conf/ not \1.isupper() and \2.islower()
        -1>> se                                         && Confusion : « \2 » est une forme verbale interrogative. Exemples : ce bâtiment, se perdre.

    [ce|c’] qui ce passe
        <<- /conf/ -3>> se                              && Confusion : « \4 » est une forme verbale. Exemples : ce bâtiment, se perdre.

    [ne|n’] ce
        <<- /conf/ -2>> se                              && Confusion. Ce chien, ce chat… Se demander, se croire…

19530
19531
19532
19533
19534
19535
19536









19537
19538
19539
19540
19541
19542
19543

TEST: Avec ses beaux yeux en {{amendes}} nul ne peut lui résister.
TEST: Nous avons déconné, nous avons été mis à l’{{amande}}.
TEST: Ces gens-là ne feront jamais {{amande honorable}}.
TEST: achète de la pâte d’{{amende}}
TEST: feront-ils {{amande honorable}}











# annales / anal-e-s
__conf_annales_anales__
    >anal [>littéraire|>politique|>ecclésiastique]
    >anal du [baccalauréat|bac|brevet|concours]
    >anal de [>physique|>chimie|>mathématique|>biologie|>géographie|>philosophie]
    >anal d’ [>histoire|>économie|>informatique]







>
>
>
>
>
>
>
>
>







19535
19536
19537
19538
19539
19540
19541
19542
19543
19544
19545
19546
19547
19548
19549
19550
19551
19552
19553
19554
19555
19556
19557

TEST: Avec ses beaux yeux en {{amendes}} nul ne peut lui résister.
TEST: Nous avons déconné, nous avons été mis à l’{{amande}}.
TEST: Ces gens-là ne feront jamais {{amande honorable}}.
TEST: achète de la pâte d’{{amende}}
TEST: feront-ils {{amande honorable}}


# ancre / encre
__conf_ancre_encre__
    >faire couler beaucoup d’ >ancre
    >faire couler l’ >ancre
        <<- /conf/ --1>> encre                          && Confusion probable. Locution “faire couler beaucoup d’encre”.|https://fr.wiktionary.org/wiki/faire_couler_l%E2%80%99encre

TEST: cette idylle a fait couler beaucoup d’{{ancre}}               ->> encre


# annales / anal-e-s
__conf_annales_anales__
    >anal [>littéraire|>politique|>ecclésiastique]
    >anal du [baccalauréat|bac|brevet|concours]
    >anal de [>physique|>chimie|>mathématique|>biologie|>géographie|>philosophie]
    >anal d’ [>histoire|>économie|>informatique]