Grammalecte  Check-in [a5b3aff838]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[fr] conversion: regex rules -> graph rules
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256:a5b3aff8386c33cdd72d94da7c85a3de1423e6be74cabb8bf6aee9f0dc09fb2b
User & Date: olr 2019-05-24 11:21:45
Context
2019-05-24
12:20
[fr] commentaire check-in: 8fd1fbf7f3 user: olr tags: fr, trunk
11:21
[fr] conversion: regex rules -> graph rules check-in: a5b3aff838 user: olr tags: fr, trunk
08:50
[core] sentence splitting: code clarification check-in: 311ccab788 user: olr tags: core, trunk
Changes

Changes to gc_lang/fr/rules.grx.

1541
1542
1543
1544
1545
1546
1547
1548










1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
....
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603

1604

1605
1606
1607
1608
1609
1610
1611
1612
1613
1614


1615
1616
1617
1618
1619
1620
1621
1622

1623
1624
1625
1626
1627



1628
1629
1630


1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
....
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
....
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728






























































1729
1730
1731
1732
1733
1734
1735
....
2016
2017
2018
2019
2020
2021
2022














































































































2023
2024

2025
2026


2027
2028
2029
2030
2031
2032
2033
....
2124
2125
2126
2127
2128
2129
2130


2131
2132
2133
2134
2135
2136
2137
....
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
....
9539
9540
9541
9542
9543
9544
9545
9546
9547
9548
9549
9550
9551
9552
9553
....
9566
9567
9568
9569
9570
9571
9572



9573
9574
9575
9576
9577
9578
9579
....
9762
9763
9764
9765
9766
9767
9768







9769
9770
9771
9772
9773
9774
9775
.....
11262
11263
11264
11265
11266
11267
11268






11269
11270
11271
11272
11273
11274
11275
!!
!!
!!
!!

[++]

#FASTER THAN TOKEN RULE










__[s](doublon)__
    ({w1}) {1,3}\1  @@0
    <<- not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", \1)
        and not (re.search("^(?:est|une?)$", \1) and before("[’']$"))
        and not (\1 == "mieux" and before("(?i)qui +$"))
    ->> \1   # Doublon.

TEST: Il y a un {{doublon doublon}}.


### Traits d’union douteux
__[i]/tu(tu_trait_union_douteux)__
    ({w1})(?:--|—|–|−|⁃)({w1})  @@0,$
    <<- spell(\1+"-"+\2) and analyse(\1+"-"+\2, ":") ->> \1-\2                                      # Trait d’union : un tiret simple suffit.

TEST: Nous préparons une {{contre–attaque}}.
TEST: Nous préparons une {{contre−attaque}}.



!!!! Nombres: typographie                                                                         !!

#(\d\d\d\d)-(\d\d\d\d)   <<- ->> \1–\2                              # Ne pas séparer deux dates par un trait d’union, mais par un tiret demi-cadratin.

__[s]/num(num_lettre_O_zéro1)__  [\dO]+[O][\dO]+ <<- not option("ocr") ->> =\0.replace("O", "0")    # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».
................................................................................
    <<- morph(\1, ":[NAQ]", ":G") =>> define(\1, [":N:A:Q:e:p"])

__[i](d_eepi_écriture_épicène_singulier)__
    ({w_2}[éuitsrn])_e  @@0
    <<- morph(\1, ":[NAQ]") =>> define(\1, [":N:A:Q:e:s"])


!!!
!!!
!!! Processeur: épuration des signes inutiles et quelques simplifications                         !!
!!!
!!!

# début de phrase
__<s>(p_début_de_phrase)__      ^[ .?!:;–—•·… »«‘’“”\"'¿¡-]+  <<- ~>> *

# fin de phrase
__<s>(p_fin_de_phrase)__        [ .?!:;–—•·… »«‘’“”\"'¿¡-]+$  <<- ~>> *

# Guillemets et exposants

__<s>(p_guillemets_exposants)__ [«»“”\"„`¹²³⁴⁵⁶⁷⁸⁹⁰]+ <<- ~>> *


# Chapitres et références
__<s>(p_chapitre_référence)__   [\[({][\dIVXLCDM]+, \d+[\])}]   <js>[\[\(\{][\dIVXLCDM]+, \d+[\]\)\}]</js>   <<- ~>> *

# le, la ou les chose(s)
__[i>(p_le_ou_les)__            l[ea] ou les {w_2}([(]s[)]) @@$ <<- ~1>> s
__[i](p_le_ou_la)__             l(e ou la|a ou le) {w_2} @@1 <<- ~1>> ’

# les références aux notes
__[i](p_références_aux_notes)__ [a-zéèâàôîù][a-zéèâàôîù-]+(\d+) @@$ <<- not morph(\0, ":") ~1>> *



# faux positifs avec adverbes de négation
__[i](p_pas_mal)__              pas mal <<- not morph(word(-1), ":D") ~>> *
__[i](p_pas_assez)__            pas assez ({w_2}) @@$ <<- morph(\1, ":A") and not morph(word(-1), ":D") ~>> *

# faux positifs avec «à chez»
__[i](p_de_chez_à_chez_pronom)__    de chez \w+ (?:à|jusqu à) chez (?:moi|toi|lui|elles?|eux|nous|vous) <<- ~>> *
__[i](p_de_chez)__                  (jusqu à|de) chez @@0 <<- ~1>> *


# singletons entre parenthèses / crochets / accolades
__<s>(p_singleton_parenthèses)__    [(]\w+[)] <js>\([a-zA-Z]+\)</js> <<- ~>> *
__<s>(p_singleton_accolades)__      [{]\w+[}] <js>\{[a-zA-Z]+\}</js> <<- ~>> *
__<s>(p_singleton_crochets)__       [\[]\w+[\]] <js>\[[a-zA-Z]+\]</js> <<- ~>> *




# Avocats
__[s](p_Me_nom_propre)__        (Me) [A-ZÉÂÔÈ][\w-]+ @@0 <<- ~1>> *



# alors que / dès lors que (éviter d’accorder un participe passé avec un pseudo-COD antérieur)
__[i](p_alors_dès_lors_que)__   (alors|dès lors) que  @@0 <<- ~1>> _
__[i](p_alors_dès_lors_que2)__  (alors|dès lors) qu’  @@0 <<- ~1>> _

# Fusion des mots “multiples” (expérimental)
__[s](p_fusion_mots_multiples)__
    [A-Z][a-z]+ [A-Z][a-z]+
    <<- spell(\0.replace(" ", "_")) ~>> =\0.replace(" ", "_")


TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.


!!
!!
!!!! Traits d’union                                                                               !!
!!
!!

__<i]/tu(tu_t_euphonique_incorrect)__
    ([-–—− ]t(?:[’' ][-–—−]?|[-–—−][’' ]?))(ils?|elles?|on|tu)  @@0,$
    <<- re.search("(?i)^(?:ils|elles|tu)$", \2) -1>> -      # Le “t” euphonique n’est pas nécessaire avec “\2”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=t+euphonique&id=2513
    <<- __else__ and \1 != "-t-" and \1 != "-T-" -1>> -t-   # Pour le “t” euphonique, il faut deux traits d’union. Pas d’apostrophe. Pas d’espace.
    <<- \1 != "-t-" ~1>> -t-
__<i]/tu(tu_t_euphonique_superflu)__
................................................................................
TEST: vient-il demain ?
TEST: prend-elle l’avantage ?
TEST: saura-t-on jamais la vérité ?
TEST: arrive-t-elle ce matin ?
TEST: y aura-t-il du poulet au dîner ?


!!
!!
!!!! Élisions                                                                                     !!
!!
!!

# presque : élision
__[i>/typo(typo_presque)__
    (presqu[’'])(?![îi]le)  @@0
        <<- -1>> "presque "                                             # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Presqu’}}exclusivement bâtie en pierre.
................................................................................

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…





@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: tag_and_disambiguate                                                                    _
@@@@
@@@@
@@@@
@@@@































































!!!
!!!
!!! Désambiguïsation                                                                              !!
!!!
!!!

................................................................................


__tag_ni__
    ni
        <<- />> ni
















































































































__tag_tiret1__
    <start>  [-|–|—]

        <<- />> tiret1
        <<- ~>> *




!!
!!
!!!! Verbes composés                                                                              !!
!!
!!
................................................................................
    ne me [le|la|les]           rendez-vous
    ne [lui|leur] en            rendez-vous
    ne [le|la|les|lui|leur]     rendez-vous
    [me|ne|nous|vous|lui]       rendez-vous
        <<- =>> define(\-1, [":VCi1:2p"])
        <<- !-1>>




__inte_verbes_composés_impératifs__
    ~\w-l(?:es?|a)-(?:[mt]oi|nous|leur)$
    ~\w-(?:[nv]ous|lui|leur)-en$
    ~\w-[mt]’en$
    ~\w-[mt]’y$
        <<- /imp/ morphVC(\1, ":V", ":E") ->> =suggVerbImpe(\1, True)                               # Ceci n’est pas une forme impérative correcte.|http://fr.wikipedia.org/wiki/Imp%C3%A9ratif_%28grammaire%29
................................................................................

TEST: {{prend-m’en}} trois, s’il te plaît.
TEST: {{Sert-toi}} d’eux autant que tu le peux, puis casse-toi.
TEST: {{explique-leurs}} de quoi il est question.
TEST: c’est mon chez-moi
TEST: c’est ton chez-toi


!!!! Noms composés                                                                                !!

__tag_noms__
    ~\w-là$
        <<- />> -là
        <<- =>> =define_from(\1, 0, -3)

#   [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous
#   rendez-vous seulement défini comme :N:m:i  dans le dictionnaire


!!!! Fusions et immunités                                                                         !!

__fusions_noms_communs__
    au revoir
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    n’ importe [qui|quoi|quel|quelle|quels|quelles]
        <<- ~1:2>> ␣

    [cultural|gender] studies
        <<- ~>> ␣
        <<- =>> define(\1, [":N:f:p"])

    machine [learning|learnings]
    standing >ovation
    star [system|systems]
    black [>bloc|>block]
        <<- ~>> ␣

    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

    *NUM  ~^h[0-9][0-9]$
        <<- space_after(\1, 0, 0) ~>> ␣


__fusions_noms_propres__
    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, [":N:e:i"])

    Mai 68
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    ~^[A-ZÂÉÈÎ].  ~^[A-ZÂÉÈÎ]
        <<- analyse_with_next(\1, " ", ":") ~>> ␣

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, [":N:m:i"])


__immunités__
    il y a
    il n’ y a
        <<- !-1>>

    à l’ arrache
        <<- !3>>

    à ce point
    en tout point
        <<- !3>>

    au  [bas|bras|côté|milieu|sein|sommet|faîte] [duquel|desquels|desquelles]
    au  [bas|bras|côté|milieu|sein|sommet|faîte] de laquelle
    aux [côtés] [duquel|desquels|desquelles]
    aux [côtés] de laquelle
        <<- !3>>

    au lieu des
        <<- !3>>

    au sortir [de|des|du|d’]
        <<- ~2>> _

    en tout et pour tout
        <<- !-1>>

    jusqu’ à
        <<- !2>>

    [comme|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quand|pourquoi|qui|quoi]  ?[ne|n’]¿  ?[se|s’]¿  (*WORD)  ?à¿  [le|la|l’|les]  @:Y  @:M
        <<- morph(\1, ":V") !-2>>

    soit pour soit contre
        <<- !3>>



@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: ocr                                                                                     _
................................................................................
    n’ [en|y] ?presque¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O)
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                                         # Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    ne [pas|jamais|plus|rien|guère|point] [beaucoup|trop]
        <<- ~3>> *

TEST: ne jamais les {{cédé}}
TEST: ne point nous {{donné}}
TEST: ne rien {{finit}}
TEST: ne jamais plus s’y {{frottait}}
TEST: ne presque jamais plus s’y {{frottaient}}
................................................................................
TEST: J’espère ne pas te déranger
TEST: Ne pas te le donner, ce serait une insulte.
TEST: ne jamais vraiment évoquer le sujet
TEST: déterminés à ne pas se laisser récupérer
TEST: de ne pas en élire du tout
TEST: Mais gare à ne pas non plus trop surestimer la menace
TEST: ne jamais beaucoup bosser, c’est sa devise.





## guerre / guère
__conf_préverbes_guère_guerre!5__
    [ne|n’]   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  *WORD  ?[plus|jamais]¿  guerre
    [ne|n’]   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         *WORD  ?[plus|jamais]¿  guerre
    [ne|n’]   [le|la|l’|les]                  [lui|leur|en|y]             *WORD  ?[plus|jamais]¿  guerre
................................................................................
        <<- ~>> *

    par-devers [moi|toi|lui|elle|elles|lui|eux|nous|vous]
        <<- ~>> *

    quant à [moi|toi|lui|elle|elles|lui|eux|nous|vous]  [<end>|,|@:[VXG]¬>qui]
        <<- ~1:3>> *








TODO: comme


__purge_locutions_latines__
    [a|à]       [priori|postériori|posteriori|contrario|cappella|minima]
        <<- ~>> *
................................................................................

    non @:A
        <<- not morph(<1, ":D.*:m:[si]") ~1>> *

    par trop @:A
        <<- ~1:2>> *







    pêle-mêle
        <<- not morph(<1, ":D.*:[me]") ~>> *

    plein est
        <<- not morph(<1, ":D.*:m:[si]") ~>> *

    [plus|moins|aussi] @:W que prévu







<
>
>
>
>
>
>
>
>
>
>








<
<
<
<
<
<
<
<
<
<







 







|
<
<
<
<

<
<
<
<
<
<
|
>
|
>

<
<
<
<
<
<
<

|
>
>

<
<
<

<
<
<
>

<
<
<
<
>
>
>

<
<
>
>

<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







<
<

<
<







 







<
<




|




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







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
<
>
|
<
>
>







 







>
>







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







|







 







>
>
>







 







>
>
>
>
>
>
>







 







>
>
>
>
>
>







1541
1542
1543
1544
1545
1546
1547

1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565










1566
1567
1568
1569
1570
1571
1572
....
1583
1584
1585
1586
1587
1588
1589
1590




1591






1592
1593
1594
1595
1596







1597
1598
1599
1600
1601



1602



1603
1604




1605
1606
1607
1608


1609
1610
1611


















1612
1613
1614
1615
1616
1617
1618
....
1646
1647
1648
1649
1650
1651
1652


1653


1654
1655
1656
1657
1658
1659
1660
....
1669
1670
1671
1672
1673
1674
1675


1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
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
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
....
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151

2152
2153

2154
2155
2156
2157
2158
2159
2160
2161
2162
....
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
....
2310
2311
2312
2313
2314
2315
2316


































































































2317
2318
2319
2320
2321
2322
2323
....
9572
9573
9574
9575
9576
9577
9578
9579
9580
9581
9582
9583
9584
9585
9586
....
9599
9600
9601
9602
9603
9604
9605
9606
9607
9608
9609
9610
9611
9612
9613
9614
9615
....
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
.....
11305
11306
11307
11308
11309
11310
11311
11312
11313
11314
11315
11316
11317
11318
11319
11320
11321
11322
11323
11324
!!
!!
!!
!!

[++]



!!!
!!!
!!! Règles par expressions régulières (plus rapides que par tokens)                               !!
!!!
!!!


!!!! Doublons                                                                                     !!

__[s](doublon)__
    ({w1}) {1,3}\1  @@0
    <<- not re.search("(?i)^([nv]ous|faire|en|la|lui|donnant|œuvre|h[éoa]|hou|olé|joli|Bora|couvent|dément|sapiens|très|vroum|[0-9]+)$", \1)
        and not (re.search("^(?:est|une?)$", \1) and before("[’']$"))
        and not (\1 == "mieux" and before("(?i)qui +$"))
    ->> \1   # Doublon.

TEST: Il y a un {{doublon doublon}}.












!!!! Nombres: typographie                                                                         !!

#(\d\d\d\d)-(\d\d\d\d)   <<- ->> \1–\2                              # Ne pas séparer deux dates par un trait d’union, mais par un tiret demi-cadratin.

__[s]/num(num_lettre_O_zéro1)__  [\dO]+[O][\dO]+ <<- not option("ocr") ->> =\0.replace("O", "0")    # S’il s’agit d’un nombre, utilisez le chiffre « 0 » plutôt que la lettre « O ».
................................................................................
    <<- morph(\1, ":[NAQ]", ":G") =>> define(\1, [":N:A:Q:e:p"])

__[i](d_eepi_écriture_épicène_singulier)__
    ({w_2}[éuitsrn])_e  @@0
    <<- morph(\1, ":[NAQ]") =>> define(\1, [":N:A:Q:e:s"])


!!!! Purge de quelques éléments                                                                   !!











# Exposants
__<s>(p_exposants)__
    [¹²³⁴⁵⁶⁷⁸⁹⁰]+
    <<- ~>> *








# les références aux notes
__[i](p_références_aux_notes)__
    ({w_2})+(\d+)  @@0,$
    <<- not morph(\0, ":") and morph(\1, ":") ~2>> *








!!!! Traits d’union                                                                               !!





__[i]/tu(tu_trait_union_douteux)__
    ({w1})(?:--|—|–|−|⁃)({w1})  @@0,$
    <<- spell(\1+"-"+\2) and analyse(\1+"-"+\2, ":") ->> \1-\2                                      # Trait d’union : un tiret simple suffit.



TEST: Nous préparons une {{contre–attaque}}.
TEST: Nous préparons une {{contre−attaque}}.




















__<i]/tu(tu_t_euphonique_incorrect)__
    ([-–—− ]t(?:[’' ][-–—−]?|[-–—−][’' ]?))(ils?|elles?|on|tu)  @@0,$
    <<- re.search("(?i)^(?:ils|elles|tu)$", \2) -1>> -      # Le “t” euphonique n’est pas nécessaire avec “\2”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?T1=t+euphonique&id=2513
    <<- __else__ and \1 != "-t-" and \1 != "-T-" -1>> -t-   # Pour le “t” euphonique, il faut deux traits d’union. Pas d’apostrophe. Pas d’espace.
    <<- \1 != "-t-" ~1>> -t-
__<i]/tu(tu_t_euphonique_superflu)__
................................................................................
TEST: vient-il demain ?
TEST: prend-elle l’avantage ?
TEST: saura-t-on jamais la vérité ?
TEST: arrive-t-elle ce matin ?
TEST: y aura-t-il du poulet au dîner ?




!!!! Élisions                                                                                     !!



# presque : élision
__[i>/typo(typo_presque)__
    (presqu[’'])(?![îi]le)  @@0
        <<- -1>> "presque "                                             # Pas d’élision autorisée sur “presque”, sauf avec “presqu’île”.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=1745

TEST: {{Presqu’}}exclusivement bâtie en pierre.
................................................................................

TEST: {{Quelqu’}}absurde que ce soit, il faut y céder.
TEST: quelqu’un vient.
TEST: elle s’en est allée avec quelqu’une…





@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: purge_tag_disambiguate                                                                  _
@@@@
@@@@
@@@@
@@@@

!!!
!!!
!!! 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  ["|”]
        <<- 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__
    [«|»|“|”|"|„|`]
        <<- ~>> *


__purge_début_phrase__
    <start>  [?|!|:|;|…|‘|’|'|¿|¡]
        <<- ~2>> *

    <start>  [-|–|—]  ?[-|–|—]¿
        <<- />> tiret1
        <<- ~2>> *

    <start>  [•|·|.]
        <<- />> puce1
        <<- ~2>> *


__purge_fin_phrase__
    [.|…|?|!|:|;|–|—|•|·|…|«|»|‘|’|“|”|"|'|¿|¡|-]  ?[.|…|?|!|:|;|–|—|•|·|…|«|»|‘|’|“|”|"|'|¿|¡|-]¿ <end>
        <<- ~1:-2>> *


__purge_mot_nombre_parenthèses_crochets_accolades__
    (  [*WORD|*NUM]  )
    [  [*WORD|*NUM]  ]
    {  [*WORD|*NUM]  }
        <<- ~>> *

__purge_chapitres_références__
    (  [*WORD|*NUM]  ,  *NUM  )
    [  [*WORD|*NUM]  ,  *NUM  ]
    {  [*WORD|*NUM]  ,  *NUM  }
        <<- ~>> *


!!!
!!!
!!! Désambiguïsation                                                                              !!
!!!
!!!

................................................................................


__tag_ni__
    ni
        <<- />> ni


!!!! Fusions et immunités                                                                         !!

__fusions_mots_grammaticaux__
    le ou la  *WORD
    la ou le  *WORD
        <<- morph(\-1, ":[NA]") ~1:3>> ␣

    alors    [que|qu’]
    dès lors [que|qu’]
        <<- ~>> ␣
        <<- =>> define(\1, [":Cs"])


__fusions_noms_communs__
    au revoir
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    n’ importe [qui|quoi|quel|quelle|quels|quelles]
        <<- ~1:2>> ␣

    [cultural|gender] studies
        <<- ~>> ␣
        <<- =>> define(\1, [":N:f:p"])

    machine [learning|learnings]
    standing >ovation
    star [system|systems]
    black [>bloc|>block]
        <<- ~>> ␣

    *NUM : *NUM
        <<- space_after(\1, 0, 0) and space_after(\1, 0, 0) ~>> ␣

    *NUM  ~^h[0-9][0-9]$
        <<- space_after(\1, 0, 0) ~>> ␣


__fusions_noms_propres__
    cac  40
        <<- ~>> ␣

    France [2|3|4|5|0|O]
        <<- ~>> ␣

    Peugeot  ~^\d0\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, [":N:e:i"])

    Mai 68
        <<- ~>> ␣
        <<- =>> define(\1, [":N:m:i"])

    ~^[A-ZÂÉÈÎ].  ~^[A-ZÂÉÈÎ]
        <<- analyse_with_next(\1, " ", ":") ~>> ␣

    Me  ~^[A-ZÂÉÈÎ].
        <<- =>> define(\1, [":T"])
        <<- ~1>> *

    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, [":N:m:i"])


__immunités__
    il y a
    il n’ y a
        <<- !-1>>

    à l’ arrache
        <<- !3>>

    à ce point
    en tout point
        <<- !3>>

    au  [bas|bras|côté|milieu|sein|sommet|faîte] [duquel|desquels|desquelles]
    au  [bas|bras|côté|milieu|sein|sommet|faîte] de laquelle
    aux [côtés] [duquel|desquels|desquelles]
    aux [côtés] de laquelle
        <<- !-1>>

    au lieu des
        <<- !3>>

    au sortir [de|des|du|d’]
        <<- ~2>> _

    de chez *WORD à chez
        <<- !-2>>

    en tout et pour tout
        <<- !-1>>

    jusqu’ à
        <<- !2>>

    [comme|que|qu’|lorsque|lorsqu’|puisque|puisqu’|quand|pourquoi|qui|quoi]  ?[ne|n’]¿  ?[se|s’]¿  (*WORD)  ?à¿  [le|la|l’|les]  @:Y  @:M
        <<- morph(\1, ":V") !-2>>

    soit pour soit contre
        <<- !3>>


TEST: New York {{étaient}} {{devenue}} la plaque tournante de tous les trafics.


!!!! Noms composés                                                                                !!

__tag_noms__

    ~\w-là$
        <<- />> -là

        <<- =>> =define_from(\1, 0, -3)



!!
!!
!!!! Verbes composés                                                                              !!
!!
!!
................................................................................
    ne me [le|la|les]           rendez-vous
    ne [lui|leur] en            rendez-vous
    ne [le|la|les|lui|leur]     rendez-vous
    [me|ne|nous|vous|lui]       rendez-vous
        <<- =>> define(\-1, [":VCi1:2p"])
        <<- !-1>>

#   [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous
#   rendez-vous seulement défini comme :N:m:i  dans le dictionnaire

__inte_verbes_composés_impératifs__
    ~\w-l(?:es?|a)-(?:[mt]oi|nous|leur)$
    ~\w-(?:[nv]ous|lui|leur)-en$
    ~\w-[mt]’en$
    ~\w-[mt]’y$
        <<- /imp/ morphVC(\1, ":V", ":E") ->> =suggVerbImpe(\1, True)                               # Ceci n’est pas une forme impérative correcte.|http://fr.wikipedia.org/wiki/Imp%C3%A9ratif_%28grammaire%29
................................................................................

TEST: {{prend-m’en}} trois, s’il te plaît.
TEST: {{Sert-toi}} d’eux autant que tu le peux, puis casse-toi.
TEST: {{explique-leurs}} de quoi il est question.
TEST: c’est mon chez-moi
TEST: c’est ton chez-toi





































































































@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: ocr                                                                                     _
................................................................................
    n’ [en|y] ?presque¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O)
    n’ [en|y] ?presque¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O)
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                                         # Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    ne [pas|jamais|plus|rien|guère|point] [beaucoup|trop|assez|mal]
        <<- ~3>> *

TEST: ne jamais les {{cédé}}
TEST: ne point nous {{donné}}
TEST: ne rien {{finit}}
TEST: ne jamais plus s’y {{frottait}}
TEST: ne presque jamais plus s’y {{frottaient}}
................................................................................
TEST: J’espère ne pas te déranger
TEST: Ne pas te le donner, ce serait une insulte.
TEST: ne jamais vraiment évoquer le sujet
TEST: déterminés à ne pas se laisser récupérer
TEST: de ne pas en élire du tout
TEST: Mais gare à ne pas non plus trop surestimer la menace
TEST: ne jamais beaucoup bosser, c’est sa devise.
TEST: ne pas mal faire, c’est déjà pas si mal
TEST: ne pas assez faire pour eux, voilà notre tort



## guerre / guère
__conf_préverbes_guère_guerre!5__
    [ne|n’]   ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  *WORD  ?[plus|jamais]¿  guerre
    [ne|n’]   [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         *WORD  ?[plus|jamais]¿  guerre
    [ne|n’]   [le|la|l’|les]                  [lui|leur|en|y]             *WORD  ?[plus|jamais]¿  guerre
................................................................................
        <<- ~>> *

    par-devers [moi|toi|lui|elle|elles|lui|eux|nous|vous]
        <<- ~>> *

    quant à [moi|toi|lui|elle|elles|lui|eux|nous|vous]  [<end>|,|@:[VXG]¬>qui]
        <<- ~1:3>> *

    de chez *WORD ?jusqu’¿ à chez [moi|toi|soi|elle|eux|elles|moi-même|toi-même|soi-même|lui-même|elle-même|nous-mêmes|vous-même|vous-mêmes|eux-mêmes|elles-mêmes]
        <<- ~>> *

    jusqu’ à    chez
    de          chez
        <<- ~1:-2>> *

TODO: comme


__purge_locutions_latines__
    [a|à]       [priori|postériori|posteriori|contrario|cappella|minima]
        <<- ~>> *
................................................................................

    non @:A
        <<- not morph(<1, ":D.*:m:[si]") ~1>> *

    par trop @:A
        <<- ~1:2>> *

    pas mal
        <<- not morph(<1, ":D") ~>> *

    pas assez *WORD
        <<- morph(\3, ":[AW]") and not morph(<1, ":D") ~>> *

    pêle-mêle
        <<- not morph(<1, ":D.*:[me]") ~>> *

    plein est
        <<- not morph(<1, ":D.*:m:[si]") ~>> *

    [plus|moins|aussi] @:W que prévu