Grammalecte  Check-in [a973e9aad8]

Overview
Comment:merge trunk
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | multid
Files: files | file ages | folders
SHA3-256: a973e9aad8540796bf2cfd8da96bf8fed8e4e8b166650f66455d3f4c2acc8945
User & Date: olr on 2018-02-28 07:50:45
Other Links: branch diff | manifest | tags
Context
2018-02-28
10:34
[graphspell][py] ibdawg: init directly from an object (JSON) check-in: efd7bb0171 user: olr tags: graphspell, multid
07:50
merge trunk check-in: a973e9aad8 user: olr tags: multid
07:43
[fx] About panel: add origin to website hyperlink check-in: a890bfa884 user: olr tags: fx, trunk
06:03
[lo] lexicon editor ui: widen space for labels check-in: db28345207 user: olr tags: lo, multid
Changes

Modified CHANGELOG.txt from [bdd168ce5d] to [edaa15286b].

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







        Pass 1: paragraph by paragraph
        Pass 2: sentence by sentence
    Text preprocessor between the two passes
    Error positioning (by group selection)

##  0.3
    Multi-passes engine
    Dictionary switcher
    Text formatter
    Lexicographer
    French Conjugueur

##  0.4
    Suggestion mechanisms
    Simpler user options writing

    Application Launcher
    Author field edition

##  0.5
    Grammalecte is an autonomous package, free from Hunspell and LibreOffice
    Indexable binary dictionary (DAWG-FSA) generator
    Disambiguator
    Multi-actions rules (bi-passes engine again)
    Simpler options for word boundaries
    Unit tests














|
|
|
|


<

>
|
|








>
>
>
>
>
>
>
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
42
43
44
        Pass 1: paragraph by paragraph
        Pass 2: sentence by sentence
    Text preprocessor between the two passes
    Error positioning (by group selection)

##  0.3
    Multi-passes engine
    [fr] Dictionary switcher
    [fr] Text formatter
    [fr] Lexicographer
    [fr] French Conjugueur

##  0.4

    Simpler user options writing
    [fr] Suggestion mechanisms
    [fr] Application Launcher
    [fr] Author field edition

##  0.5
    Grammalecte is an autonomous package, free from Hunspell and LibreOffice
    Indexable binary dictionary (DAWG-FSA) generator
    Disambiguator
    Multi-actions rules (bi-passes engine again)
    Simpler options for word boundaries
    Unit tests
    New engine written in JavaScript
    [fr] Extension for Firefox
    [fr] Extension for Thunderbird

##  0.6
    [fr] Extension for Firefox converted to WebExtension
    [fr] Enumerator of words

Modified gc_lang/fr/rules.grx from [4b78e905cb] to [d209c32a20].

4221
4222
4223
4224
4225
4226
4227


























4228
4229
4230
4231
4232
4233
4234
.....
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376

10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387

10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400

10401
10402
10403
10404
10405
10406
10407
# qu’elle / quelle
__[i]/conf(conf_quelle_nom_adj)__
    (qu elles?) +(?!seule?s?)({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ]", ":(?:G|[123][sp]|W)") -1>> =\1.replace(" ", "")                       # Confusion probable. Ex : Quelle femme ! Je crois qu’elle réussira.

TEST: {{qu’elle}} emmerdeuse.




























# savoir / ignorer
__[i]/conf(être_pas_sans_savoir)__
    ({etre}) pas sans (ignor(?:e[rz]|ée?s?|ai[st]))  @@0,$
    <<- morph(\1, ":V0e", False)
    -2>> savoir     # Confusion : vous écrivez l’inverse de ce que vous voulez dire.|http://fr.wiktionary.org/wiki/vous_n%E2%80%99%C3%AAtes_pas_sans_savoir

................................................................................
#   ->> fait \1                      # Le participe passé de faire reste au masculin singulier s’il est suivi par un verbe à l’infinitif.

__[i](p_les_avoir_fait_vinfi)__
    les ({avoir}) +(fait) +(?:[mts](?:e +|’)|)({infi}) @@w,w,$ <<- morph(\1, ">avoir ", False) and morph(\3, ":Y", False) ~2>> _

__[i]/ppas(ppas_pronom_avoir)__
    (?:j’|je |tu |ils? |elles? |on |et )(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@w,$
    <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \2) and morph(word(-1), ">puisque? ", False, True)
        and morph(\1, ":V0a", False) and not \2.isupper() and morphex(\2, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    -2>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: ils leur avaient {{donnés}} du fil à retordre.
TEST: il a {{affronte}} une bande de voleurs de bétail
TEST: J’ai {{mettrai}} du sel.                                                    ->> mis
TEST: J’ai {{lut}} son journal.                                                   ->> lu
TEST: Ils avaient barre sur lui.



__[i]/ppas(ppas_nous_vous_avoir)__
    ([nv]ous) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@0,w,$
    <<- morph(\1, ":Os", False)
        and not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \3) and morph(word(-1), ">puisque? ", False, True)
        and morph(\2, ":V0a", False) and not \3.isupper() and morphex(\3, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    -3>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Nous avons {{donne}} tout notre potentiel.

TEST: D’un côté, le modèle occidental, […], nous a libérés de […]


__[i]/ppas(ppas_det_nom_avoir)__
    (l(?:’|es? |a |eurs )|ce(?:s|tte|t|rtaine?s|) |des |quelques |[mts](?:es|on|a) |[nv]o(?:s|tre) ) *({w_2}) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@0,w,w,$
    <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \4) and morph(word(-1), ">puisque? ", False, True)
        and not morph(\2, ":G", False) and morph(\3, ":V0a", False) and not \4.isupper() and morphex(\4, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
        and not (\3 == "avions" and morph(\4, ":3[sp]", False))
    -4>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Les femmes lui avait {{conseillées}} de se taire.
TEST: le mur avait {{était}} détruit

TEST: Certains les ont d’abord jugés trop lents.


__[i]/ppas(ppas_les_avoir)__
    les +({avoir}) +({w_1}(?:[éiut]e?|is|se))  @@w,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":V[0-3]..t.*:Q.*:s", ":[GWpi]")
    -2>> =suggPlur(@)







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







|









>





|





>





|







>







4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
.....
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419
10420
10421
10422
10423
10424
10425
10426
10427
10428
10429
10430
10431
10432
10433
10434
10435
10436
# qu’elle / quelle
__[i]/conf(conf_quelle_nom_adj)__
    (qu elles?) +(?!seule?s?)({w_2})  @@0,$
    <<- morphex(\2, ":[NAQ]", ":(?:G|[123][sp]|W)") -1>> =\1.replace(" ", "")                       # Confusion probable. Ex : Quelle femme ! Je crois qu’elle réussira.

TEST: {{qu’elle}} emmerdeuse.


__[i]/conf(conf_qu_elle_verbe)__
    (quelles?) +({w_1})  @@0,$
    <<- \2.islower() and (morphex(\2, ":V|>(?:ne?|me?|te?|se?|[nv]ous|l(?:e|a|es|ui|leur|)|en|y) ", ":[NA].*:[fe]") or \2 == "t" or \2 == "s") >>>
    <<- \1.endswith("e") and not morph(\2, ":V0e", False) -1>> qu’elle                              # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. 1
    <<- __else__ and \1.endswith("s") and not morph(\2, ":V0e", False) -1>> qu’elles                # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. 2
    <<- __else__ and morph(\2, ":V0e", False) and morphex(word(1), ":[QA]", ":G", False) >>>
    <<- \1.endswith("e") -1>> qu’elle                                                               # Confusion. Le sujet “elle” doit être séparée de la conjonction “que”. 3
    <<- __else__ and \1.endswith("s") -1>> qu’elles                                                 # Confusion. Le sujet “elles” doit être séparée de la conjonction “que”. 4

TEST: Je sais {{quelle}} est partie.
TEST: {{Quelle}} partit prendre son repas à la cantine, je n’en avais cure.
TEST: Il se plaint {{quelle}} ne nous dit rien.
TEST: {{Quelles}} sont intelligentes, ces filles-là.
TEST: {{Quelle}} a du répondant, cette gamine !
TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut.
TEST: Je veux {{quelles}} s’efforcent à y parvenir.
TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien.
TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire.
TEST: {{Quelles}} t’arrivent seulement à la cheville, voilà qui serait étonnant.
TEST: {{Quelles}} m’engueulent encore une seule fois et elles vont le regretter.
TEST: Je crois {{quelle}} est partie.
TEST: il pense {{quelles}} sont devenues dangereuses.
TEST: Quelle est sa passion ?
TEST: Quelles sont leurs principales études ?


# savoir / ignorer
__[i]/conf(être_pas_sans_savoir)__
    ({etre}) pas sans (ignor(?:e[rz]|ée?s?|ai[st]))  @@0,$
    <<- morph(\1, ":V0e", False)
    -2>> savoir     # Confusion : vous écrivez l’inverse de ce que vous voulez dire.|http://fr.wiktionary.org/wiki/vous_n%E2%80%99%C3%AAtes_pas_sans_savoir

................................................................................
#   ->> fait \1                      # Le participe passé de faire reste au masculin singulier s’il est suivi par un verbe à l’infinitif.

__[i](p_les_avoir_fait_vinfi)__
    les ({avoir}) +(fait) +(?:[mts](?:e +|’)|)({infi}) @@w,w,$ <<- morph(\1, ">avoir ", False) and morph(\3, ":Y", False) ~2>> _

__[i]/ppas(ppas_pronom_avoir)__
    (?:j’|je |tu |ils? |elles? |on |et )(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@w,$
    <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \2) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True)
        and morph(\1, ":V0a", False) and not \2.isupper() and morphex(\2, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    -2>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: ils leur avaient {{donnés}} du fil à retordre.
TEST: il a {{affronte}} une bande de voleurs de bétail
TEST: J’ai {{mettrai}} du sel.                                                    ->> mis
TEST: J’ai {{lut}} son journal.                                                   ->> lu
TEST: Ils avaient barre sur lui.
TEST: Si j’avais {{sut}}.


__[i]/ppas(ppas_nous_vous_avoir)__
    ([nv]ous) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@0,w,$
    <<- morph(\1, ":Os", False)
        and not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \3) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True)
        and morph(\2, ":V0a", False) and not \3.isupper() and morphex(\3, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    -3>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Nous avons {{donne}} tout notre potentiel.
TEST: mais nous avons {{était}} surpris par cette annonce.
TEST: D’un côté, le modèle occidental, […], nous a libérés de […]


__[i]/ppas(ppas_det_nom_avoir)__
    (l(?:’|es? |a |eurs )|ce(?:s|tte|t|rtaine?s|) |des |quelques |[mts](?:es|on|a) |[nv]o(?:s|tre) ) *({w_2}) +(?:ne +|n’|l(?:ui|eur) +|)({avoir}) +({w_2})  @@0,w,w,$
    <<- not re.search("(?i)^(?:barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours)$", \4) and morph(word(-1), ">(?:comme|et|lorsque?|mais|o[uù]|puisque?|qu(?:oique?|i|and)|si(?:non|)) ", False, True)
        and not morph(\2, ":G", False) and morph(\3, ":V0a", False) and not \4.isupper() and morphex(\4, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
        and not (\3 == "avions" and morph(\4, ":3[sp]", False))
    -4>> =suggMasSing(@)
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Les femmes lui avait {{conseillées}} de se taire.
TEST: le mur avait {{était}} détruit
TEST: Lorsque les femmes ont {{apprit}} la nouvelle…
TEST: Certains les ont d’abord jugés trop lents.


__[i]/ppas(ppas_les_avoir)__
    les +({avoir}) +({w_1}(?:[éiut]e?|is|se))  @@w,$
    <<- morph(\1, ":V0a", False) and morphex(\2, ":V[0-3]..t.*:Q.*:s", ":[GWpi]")
    -2>> =suggPlur(@)

Modified gc_lang/fr/webext/panel/main.html from [2d4092fcfc] to [2f5e7b7df9].

30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
        <section id="home_page" class="page">

          <div id="mainlogo">
            <div class="center"><img src="../img/logo120_text.png" alt="Grammalecte"></div>
            <p class="underline center">
              Version ${version}
            </p>
            <p id="link_website" class="link center" data-url="http://grammalecte.net">Site web</p>
            <p class="notice center">
              Grammalecte est un correcteur grammatical open&nbsp;source sous <span id="link_gpl" class="link" data-url="https://www.gnu.org/licenses/gpl.html">licence GPL 3</span>
            </p>
          </div>
          
          <div id="thanks">
            <p class="center" data-l10n-id="thanks1">Grammalecte remercie</p>







|







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
        <section id="home_page" class="page">

          <div id="mainlogo">
            <div class="center"><img src="../img/logo120_text.png" alt="Grammalecte"></div>
            <p class="underline center">
              Version ${version}
            </p>
            <p id="link_website" class="link center" data-url="http://grammalecte.net/?from=grammalecte-fx">Site web</p>
            <p class="notice center">
              Grammalecte est un correcteur grammatical open&nbsp;source sous <span id="link_gpl" class="link" data-url="https://www.gnu.org/licenses/gpl.html">licence GPL 3</span>
            </p>
          </div>
          
          <div id="thanks">
            <p class="center" data-l10n-id="thanks1">Grammalecte remercie</p>

Modified graphspell-js/char_player.js from [c171c18615] to [8f9100bd09].

235
236
237
238
239
240
241


242
243
244
245
246
247
248
249
250
251


252
253
254
255
256
257
258
        ["AN", ["AM", "EN", "EM"]],
        ["au", ["eau", "o", "ô"]],
        ["AU", ["EAU", "O", "Ô"]],
        ["em", ["an", "am", "en"]],
        ["EM", ["AN", "AM", "EN"]],
        ["en", ["an", "am", "em"]],
        ["EN", ["AN", "AM", "EM"]],


        ["ai", ["ei", "é", "è", "ê", "ë"]],
        ["AI", ["EI", "É", "È", "Ê", "Ë"]],
        ["ei", ["ai", "é", "è", "ê", "ë"]],
        ["EI", ["AI", "É", "È", "Ê", "Ë"]],
        ["ch", ["sh", "c", "ss"]],
        ["CH", ["SH", "C", "SS"]],
        ["ct", ["x", "cc"]],
        ["CT", ["X", "CC"]],
        ["oa", ["oi",]],
        ["OA", ["OI",]],


        ["oi", ["oa", "oie"]],
        ["OI", ["OA", "OIE"]],
        ["ph", ["f",]],
        ["PH", ["F",]],
        ["qu", ["q", "cq", "ck", "c", "k"]],
        ["QU", ["Q", "CQ", "CK", "C", "K"]],
        ["ss", ["c", "ç"]],







>
>










>
>







235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
        ["AN", ["AM", "EN", "EM"]],
        ["au", ["eau", "o", "ô"]],
        ["AU", ["EAU", "O", "Ô"]],
        ["em", ["an", "am", "en"]],
        ["EM", ["AN", "AM", "EN"]],
        ["en", ["an", "am", "em"]],
        ["EN", ["AN", "AM", "EM"]],
        ["ae", ["æ", "é"]],
        ["AE", ["Æ", "É"]],
        ["ai", ["ei", "é", "è", "ê", "ë"]],
        ["AI", ["EI", "É", "È", "Ê", "Ë"]],
        ["ei", ["ai", "é", "è", "ê", "ë"]],
        ["EI", ["AI", "É", "È", "Ê", "Ë"]],
        ["ch", ["sh", "c", "ss"]],
        ["CH", ["SH", "C", "SS"]],
        ["ct", ["x", "cc"]],
        ["CT", ["X", "CC"]],
        ["oa", ["oi",]],
        ["OA", ["OI",]],
        ["oe", ["œ",]],
        ["OE", ["Œ",]],
        ["oi", ["oa", "oie"]],
        ["OI", ["OA", "OIE"]],
        ["ph", ["f",]],
        ["PH", ["F",]],
        ["qu", ["q", "cq", "ck", "c", "k"]],
        ["QU", ["Q", "CQ", "CK", "C", "K"]],
        ["ss", ["c", "ç"]],

Modified graphspell/char_player.py from [e841b9211a] to [729262507c].

224
225
226
227
228
229
230


231
232
233
234
235
236
237
238
239
240


241
242
243
244
245
246
247
    "AN": ("AM", "EN", "EM"),
    "au": ("eau", "o", "ô"),
    "AU": ("EAU", "O", "Ô"),
    "em": ("an", "am", "en"),
    "EM": ("AN", "AM", "EN"),
    "en": ("an", "am", "em"),
    "EN": ("AN", "AM", "EM"),


    "ai": ("ei", "é", "è", "ê", "ë"),
    "AI": ("EI", "É", "È", "Ê", "Ë"),
    "ei": ("ai", "é", "è", "ê", "ë"),
    "EI": ("AI", "É", "È", "Ê", "Ë"),
    "ch": ("sh", "c", "ss"),
    "CH": ("SH", "C", "SS"),
    "ct": ("x", "cc"),
    "CT": ("X", "CC"),
    "oa": ("oi",),
    "OA": ("OI",),


    "oi": ("oa", "oie"),
    "OI": ("OA", "OIE"),
    "ph": ("f",),
    "PH": ("F",),
    "qu": ("q", "cq", "ck", "c", "k"),
    "QU": ("Q", "CQ", "CK", "C", "K"),
    "ss": ("c", "ç"),







>
>










>
>







224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
    "AN": ("AM", "EN", "EM"),
    "au": ("eau", "o", "ô"),
    "AU": ("EAU", "O", "Ô"),
    "em": ("an", "am", "en"),
    "EM": ("AN", "AM", "EN"),
    "en": ("an", "am", "em"),
    "EN": ("AN", "AM", "EM"),
    "ae": ("æ", "é"),
    "AE": ("Æ", "É"),
    "ai": ("ei", "é", "è", "ê", "ë"),
    "AI": ("EI", "É", "È", "Ê", "Ë"),
    "ei": ("ai", "é", "è", "ê", "ë"),
    "EI": ("AI", "É", "È", "Ê", "Ë"),
    "ch": ("sh", "c", "ss"),
    "CH": ("SH", "C", "SS"),
    "ct": ("x", "cc"),
    "CT": ("X", "CC"),
    "oa": ("oi",),
    "OA": ("OI",),
    "oe": ("œ",),
    "OE": ("Œ",),
    "oi": ("oa", "oie"),
    "OI": ("OA", "OIE"),
    "ph": ("f",),
    "PH": ("F",),
    "qu": ("q", "cq", "ck", "c", "k"),
    "QU": ("Q", "CQ", "CK", "C", "K"),
    "ss": ("c", "ç"),