Grammalecte  Check-in [ea9dc8e535]

Overview
Comment:[fr] nommage des règles du processeur
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: ea9dc8e5350e184120f59c23fac811c1be87b2c9153121ffd421c920de2eedd5
User & Date: olr on 2017-05-16 12:40:21
Other Links: manifest | tags
Context
2017-05-16
13:38
[fr] nommage des règles du processeur check-in: 6dfd934583 user: olr tags: fr, trunk
12:40
[fr] nommage des règles du processeur check-in: ea9dc8e535 user: olr tags: fr, trunk
2017-05-15
09:11
[fr] pt: hôtel de ville check-in: ab26110c2e user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/rules.grx from [0030de03a4] to [221ff498f7].

1648
1649
1650
1651
1652
1653
1654

1655
1656
1657
1658

1659
1660

1661
1662

1663
1664

1665
1666

1667
1668

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
....
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
....
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
....
4434
4435
4436
4437
4438
4439
4440

4441
4442
4443
4444

4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475

4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493

4494

4495

4496

4497

4498

4499

4500

4501

4502

4503

4504

4505

4506

4507
4508
4509
4510
4511
4512
4513
4514
....
4554
4555
4556
4557
4558
4559
4560
4561
4562

4563

4564

4565

4566

4567

4568
4569
4570
4571
4572
4573

4574
4575
4576

4577
4578
4579

4580
4581
4582
4583
4584
4585
4586
4587
....
7729
7730
7731
7732
7733
7734
7735

7736
7737
7738
7739

7740
7741
7742
7743
7744
7745

7746
7747

7748
7749
7750

7751
7752
7753

7754
7755
7756
7757


7758

7759
7760
7761

7762
7763

7764
7765

7766
7767
7768
7769
7770
7771
7772

7773
7774

7775
7776
7777
7778
7779
7780
7781
....
8985
8986
8987
8988
8989
8990
8991
8992
8993
8994
8995
8996
8997
8998
8999
9000
9001
9002
9003
9004
9005
....
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
9273
9274
9275
9276
9277
9278
9279
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294


#
# //////////////////////////////////////// DÉSAMBIGUÏSATEUR ////////////////////////////////////////
#

# mots grammaticaux

__[i]__  dans
    <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes ", False, False) =>> select(\0, ":P")

# verbe

__[i]__  ne +(?:l(?:es? |eurs? |ui |a |’)|[nv]ous |)({w_1}) @@$
    <<- not morph(\1, ":(?:O[sp]|X)", False) =>> select(\1, ":V")

__[i]__  [nmts]’(?:en +|y +|)({w_1}) @@$
    <<- not morph(\1, ":X", False) =>> select(\1, ":V")

__[i]__  [mts]e +(?:l(?:es? +|a +|’)|)({w_2})  @@$
    <<- =>> select(\1, ":V")

__[i]__  j’(?:en +|y +|)({w_1}) @@$
    <<- =>> select(\1, ":[123][sp]")

__[i]__  (?:je|ils?|on) +(?:l(?:es? +|la +|’)|[nv]ous +|)({w_1}) @@$
    <<- not morph(\1, ":(?:Oo|X)", False) =>> select(\1, ":[123][sp]")

__[i]__  tu +(?:l(?:es? +|la +|’)|[nv]ous +|)({w_1}) @@$
    <<- morph(word(-1), ":Cs", False, True) and not morph(\1, ":(?:Oo|X)", False) =>> select(\1, ":[123][sp]")

__[s]__  ([A-ZÉÈ]{w_1}) +({w_1})  @@0,$
    <<- morph(\1, ":M") and \2.islower() and morphex(\2, ":[123][sg]", ":Q") and morph(\2, ":N", False) and morph(word(-1), ":Cs", False, True)
    =>> select(\2, ":[123][sp]")

__[i]__  (?:que?|combien|pourquoi) +(?:en +|y +)({w_3}) @@$
    <<- =>> exclude(\1, ":E")


# groupe nominal

__[i]__  aucun +({w_4}) @@$
    <<- morph(\1, ":[NA].*:[me]", False) =>> exclude(\1, ":V")

__[i]__  d(?:e +|’)({w_1}) @@$
    <<- not morph(\1, ":[YD]", False) =>> exclude(\1, ":V")

__[i]__  d’une? ({w_1}) @@$
    <<- =>> exclude(\1, ":V")

__[i]__  (?:des|chaque|quelques?|cet(?:te|)|m(?:on|a)|[ts]a|aux?) +({w_1}) @@$
    <<- =>> exclude(\1, ":V")

__[i]__  de l(?:a |’)({w_2}) @@6
    <<- not morph(\1, ":Y", False) =>> exclude(\1, ":V")

__[i]__  de (?:tel(?:le|)s?|ce(?:tte|t|s)|[ts](?:a|es)|m(?:on|a|es)|[nv]o(?:tre|s)|plein) +({w_2})  @@$
    <<- =>> exclude(\1, ":V")

__[i]__  par +({w_3}) @@$
    <<- =>> exclude(\1, ":V[123]")

__[i]__  très +({w_2}) @@$
    <<- =>> exclude(\1, ":[123][sp]")


TEST: il s’agit d’{{un}} {{anagramme}}
TEST: nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
TEST: elle finit par être très fière de son fils.

................................................................................
TEST: il y en a peu, voire très peu.
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.



#### Pronoms
__[i]__  m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s")                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
    (n(?:e +|’))({w_1})  @@0,$
................................................................................
__[i]__  quant à (?:[mt]oi|lui|elles?|[nv]ous|eux)(?! qui) <<- ~>> *
__[i]__  que ça (?:me|te|l(?:ui|eur)|[nv]ous) plaise ou non <<- ~>> *
__[i]__  que (?:je le veuille|tu le veuilles|vous le vouliez|nous le voulions) ou non <<- ~>> *
__[i]__  qu (?:à cela ne tienne|(?:(?:il|elle|on) le veuille|(?:ils|elles) le veuillent) ou non) <<- ~>> *
__[i]__  quel qu en soit le (?:moyen|prix|risque(?: financier|)|danger) <<- ~>> *
__[i]__  quelle qu en soit la (?:cause|raison) <<- ~>> *
__[i]__  quelque(?: (?:part|temps)|s fois) <<- ~>> *
__[i]__  quelques (?:instants|secondes|minutes|heures|jours|semaines|mois|années|siècles|millénaires|trimestres|semestres) (?:auparavant|plus (?:tard|tôt)) <<- ~>> *
__[i]__  qui plus est <<- ~>> *
__[i]__  qui (ce (?:jour|matin|après-midi|soir)-là|cette (?:nuit|matinée|soirée)-là) @@4 <<- ~1>> *
__[i]__  quoi qu il (?:(?:arriv|en co[ûu]t)(?:e|ât)|adv(?:ienne|înt)) <<- ~>> *
__[i]__  sans (?:grande|grosse) difficulté(?: apparente| aucune| financière| majeure| particulière|) <<- ~>> *
__[i]__  sans (?:ambages|arrêt|au(?:cun doute|tre forme de procès)|cesse|commune mesure|conteste|coup férir|crier gare|difficulté(?: apparente| aucune| financière| majeure| particulière|)|dire mot|doute|encombres?|états d’âme|fin|foi,? ni loi|l’ombre d’un doute|le (?:faire exprès|vouloir)|mot dire|nul doute|queue ni tête|raison apparente|relâche|(?:grand |)succès|trêve|(?:pour autant |)y (?:prendre g(?:arde|o[ûu]t)|faire attention|parvenir|réussir|réfléchir|songer|penser)|faire de vagues|s’en (?:rendre compte|apercevoir)|l’aide de personne) <<- ~>> *
__[i]__  séance tenante <<- ~>> *
__[i]__  selon (?:toute vraisemblance|(?:[mt]oi|lui|elles?|eux|nous|vous)(?! qui)) <<- ~>> *
................................................................................
# adverbes en -ment
__[i]__  ({w_2}) (l[ea] (?:plus|moins) (\w+ment)) ({w_2})  @@0,w,>2:$,$
    <<- morph(\1, ":[NAQ]", False) and morph(\3, ":W", False) and morph(\4, ":[AQ]", False) ~2>> *
__[i]__  complètement <<- not morph(word(-1), ":D", False, True) ~>> *
__[i]__  (\w+ment)(?: parlant|) @@0 <<- morph(\1, ":W\\b") ~>> *

# couleurs invariables

__[i]__  ({w_2}) +((?:beige|blanc|bleu|brun|châtain|cyan|gris|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet) (?:clair|fluo|foncé|irisé|pâle|pastel|sombre|vif|tendre)) @@0,$
    <<- morph(\1, ":[NAQ]", False) ~2>> *

# locutions adjectivales & couleurs

__[i]__  ({w_2}) +(bas(?: de gamme|se consommation)|bon (?:enfant|marché|teint|chic,? bon genre)|cl(?:é|ef) en mains?|dernier cri|fleur bleue|grand (?:public|luxe)|grandeur nature|haut(?: de gamme|e résolution)|longue (?:distance|portée|durée)|meilleur marché|numéro (?:un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf)|onze|douze|treize|quatorze|quinze|seize|vingt)|plein cadre|top secret|vieux jeu|open source|Créative Commons|pur jus|terre à terre|bleu (?:ciel|marine|saphir|turquoise)|vert (?:émeraude|olive|pomme)|rouge (?:brique|rubis|sang)|jaune sable|blond platine|gris (?:acier|anthracite|perle)|noir (?:d(?:’encre|e jais)|et blanc))
    @@0,$
    <<- morph(\1, ":(?:N|A|Q|V0e)", False) ~2>> *

# tous / tout / toute / toutes
__[i]__  (tout) (?:le|cet?|[mts]on) @@0             <<- ~1>> *
__[i]__  (toute) (?:la|cette|[mts]a) @@0            <<- ~1>> *
__[i]__  (tou(?:te|)s) (?:[ldscsmt]es) @@0          <<- ~1>> *


## 1 mot
__[i]__  ai(?:lleurs|nsi)                           <<- ~>> *
__[i]__  al(?:entour|ors)                           <<- ~>> *
__[i]__  au(?:jourd’hui|paravant)                   <<- ~>> *
__[i]__  bientôt                                    <<- ~>> *
__[i]__  ce(?:pendant|rtes)                         <<- ~>> *
__[i]__  ci-desso?us                                <<- ~>> *
__[i]__  de(?:bout|rechef)                          <<- ~>> *
__[i]__  (depuis), @@0                             <<- ~1>> *
__[i]__  dé(?:jà|sormais)                           <<- ~>> *
__[i]__  do(?:nc|rénavant)                          <<- ~>> *
__[i]__  en(?:fin|suite|core)                       <<- ~>> *
__[i]__  guère                                      <<- ~>> *
__[i]__  jadis                                      <<- ~>> *
__[i]__  jamais          <<- not before(r"(?i)\bne +$") ~>> *
__[i]__  lo(?:in|ngtemps)                           <<- ~>> *
__[i]__  mouais                                     <<- ~>> *
__[i]__  n(?:aguère|éanmoins)                       <<- ~>> *
__[i]__  par(?:fois|tout)                           <<- ~>> *
__[i]__  p(?:eut-être|lutôt|ourtant|resque|rimo)    <<- ~>> *
__[i]__  quelquefois                                <<- ~>> *

__[i]__  sou(?:dain|vent)                           <<- ~>> *
__[i]__  tou(?:jours|tefois)                        <<- ~>> *
__[i]__  secondo                                    <<- ~>> *
__[i]__  sur(?:-le-champ|tout)                      <<- ~>> *
__[i]__  t(?:ôt|ard|antôt|ertio)                    <<- ~>> *
__[i]__  très                                       <<- ~>> *
__[i]__  vite                                       <<- ~>> *
__[i]__  volontiers                                 <<- ~>> *

# après
__[i]__  au fur et à mesure                         <<- ~>> *
__<i>__  , +(?:oui|non|entre autres),               <<- ~>> *
__<s>__  , +,                                       <<- ~>> *
__<s>__  ^ *,                                       <<- ~>> *
__<s>__  , *$                                       <<- ~>> *
__<s>__  [—–-] +[—–-]                               <<- ~>> *
__<s>__  [<] +[>]                                   <<- ~>> *
__<s>__  [(] +[)]                                   <<- ~>> *



# Seconde passe (il faut réorganiser tout le cycle de simplification)

__[i]__  (à (?:[mts]es|[nv]os|leurs) yeux) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *

__[i]__  (chaque (?:année|semaine|journée|décennie)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[fe]:[si]|Oo|[123][sp])", False) ~1>> *

__[i]__  (chaque (?:an|jour|mois)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[me]:[si]|Oo|[123][sp])", False) ~1>> *

__[i]__  (dans l’ensemble) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *

__[i]__  (de ce (?:seul |)fait) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *

__[i]__  (dès les premiers (?:jours|mois|ans|siècles|trimestres|semestres)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *

__[i]__  (dès les premières (?:années|semaines|minutes|secondes|heures|décennies)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *

__[i]__  (en (?:certaines|quelques|plusieurs|de multiples) occasions) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *

__[i]__  (entre autres choses) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *

__[i]__  ((?:quelques|plusieurs|de +nombreuses) (?:secondes|minutes|heures|journées|semaines|années|décennies)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *

__[i]__  ((?:quelques|plusieurs|de +nombreux) (?:instants|moments|jours|mois|ans|siècles)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *

__[i]__  (un (?:instant|moment)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *


TEST: pourquoi faire compliqué quand on peut faire simple
TEST: Pour ceux et celles qui étaient présents à la cérémonie
TEST: les pires vilénies suite au mauvais vote du peuple
TEST: La numéro 1 mondiale
TEST: cette information n’est rien comparé à cette énorme pression
................................................................................

#__[i]__  ({avoir}) +({w_1}[eiuts])  @@0,$
#    <<- morph(\1, ":V0a", False) and morphex(\1, ":Q", ":G")
#    =>> exclude(\2, ":A")


### Désambiguïsation par séparation de le/la/les avec la suite s’il s’agit de COD dans les syntagmes verbaux
#__[i>__  [nmts]e l(?:es?|a)( ) @@$          <<- ~1>> @
__[i>__  je l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":1s", False, False) ~1>> @

__[i>__  tu l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":2s", False, False) ~1>> @

__[i>__  (?:il|elle|on) l(?:es?|a)( ) @@$   <<- not morph(word(-1), ":3s", False, False) ~1>> @

__[i>__  nous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":1p", False, False) ~1>> @

__[i>__  vous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":2p", False, False) ~1>> @

__[i>__  (?:ils|elles) l(?:es?|a)( ) @@$    <<- not morph(word(-1), ":3p", False, False) ~1>> @

#__[i]__  l(?:es?|a)( )({w_2}) @@*,$         <<- morph(\2, ":[123][sp]") ~1>> @


### DPP: Désambiguïsation par distinction des mots qui sont à la fois (verbes conjugués ET (noms ET/OU adjectifs))
# Cette distinction est nécessaire seulement pour les mots suivant un groupe nominal.
# Exemples : finis, donne(s), avance(s), bavarde(s)

__[i]__  (?<![lL]’)une? ({w_2})( ) *({w_2})  @@w,**,$
    <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ")
    ~2>> ~

__[i]__  (?:d(?:es? |’)|[mts](?:es|on|a) |ce(?:s|t(?:te|)|rtaine?s|) |[nv](?:otre|os) |leurs |quelques ) *({w_2})( ) *({w_2}) @@w,**,$
    <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ") and not re.search("^[dD](?:’une?|e l(?:a|eur)) ", \0)
    ~2>> ~

__[i]__  l(?:es? |a |’|eur ) *({w_2})( ) *({w_2})  @@w,**,$
    <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and not word(-1)) )
    ~2>> ~

TEST: comme le signe évident d’une politique volontaire
TEST: c’était le signe évident d’une politique volontaire
TEST: ce que c’est : le signe évident d’une politique volontaire

................................................................................
__[i]__  aucune? (de [nv]ous|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  aucune? +(des +{w_2}) +ne? @@w <<- ~1>> *
__[i]__  chacune? (de [nv]ous|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  l’une? (de [nv]ous|des [nv]ôtres|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  la plupart (des {w_2}) @@11 <<- ~1>> *

# groupe déjà partiellement simplifié (selon les règles de la passe 3)

__[i]__  (?:a(?:ux?|vec)|à|en)   +d(?:e +(?:la |l’|leurs? |ce(?:s|tte|t|) |[nv]o(?:s|tre) |[mts](?:a|on) |quelques? |certaine?s? )|es? |u ) *({w2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG() ~>> *

## y compris (pas terrible, mais cas difficile)

__[i]__  y compris <<- not before(r"(?i)\b(?:[jn]’|tu )$") ~>> *

## eux/nous/vous tous -- elles toutes
__[i]__  [nv]ous (tou(?:te|)s) qui @@5 <<- ~1>> *
__[i]__  eux (tous) qui @@4 <<- ~1>> *
__[i]__  elles (toutes) qui @@6 <<- ~1>> *


## groupe avec préposition

__[i]__  (?:avec|à|s(?:ur|ous|elon)|c(?:ontre|hez)|dans|envers|p(?:ar|our)|aux?) +({w_2})  @@$
    <<- morphex(\1, ":[NAQ]", ":[GY]") and isEndOfNG()
    ~>> *

__[i]__  (?:avec|à|s(?:ur|ous|elon)|c(?:ontre|hez)|dans|envers|p(?:ar|our)) +(?:les? |la |l’|de(?:s| la|) |ce[st]? |cette |[mts](?:es|on|a) |[nv]o(?:s|tre) |leurs? |certaine?s? |quelques ) *({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG()
    ~>> *

__[i]__  lors d(?:’|e(?:s| la|) |u ) *({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG()
    ~>> *



__[i]__  nul doute qu  <<- not word(-1) ~>> *

__[i]__  (dout\w+)( ) *que?  @@0,*  <<- morph(\1, ">douter ", False) and before(r"(?i)\b(?:[mts]e|[nv]ous) +$") ~2>> ,

## de +

__[i]__  d(?:e +|’)(?!autres)({w_2}) @@$
    <<- morphex(\1, ":N", ":[GY]") and isEndOfNG() ~>> *

__[i]__  de (?:ce(?:t|tte|s|)|[mts](?:on|a|es)|[nv](?:otre|os)|leurs) +({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG() ~>> *

__[i]__  de l(?:a|eur) +({w_2})  @@$
    <<- morphex(\1, ":[NAQ]", ":Y") and isEndOfNG() ~>> *

__[s]__  , +, <<- ~>> *
__[s]__  ^ *, <<- ~>> *
__[s]__  , *$ <<- ~>> *
__[s]__  [—–-] +[—–-] <<- ~>> *

__[s]__  [<] +[>] <<- ~>> *
__[s]__  [(] +[)] <<- ~>> *



TEST: tandis que d’autres perçoivent le bon goût de la soupe.
TEST: Je me doute bien que vous avez trouvé la réponse.
TEST: Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.


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



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
#

__<i>__  n(’)importe quo?i @@1 <<- ~1>> `
__<i]__  ^ *ne l(?:es?|a) l(?:ui|eur) <<- ~>> >
__<i]__  ^ *ne (?:[mt]’|l(?:ui|eur) )en <<- ~>> >
__<i]__  ^ *ne (?:[mt]e|[nv]ous) (?:les?|la|en) <<- ~>> >
__<i]__  ^ *ne +(?:en|l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous) <<- ~>> >
__<i>__  ^ *n’(?:en |y |) <<- ~>> >
__<i>__  ^ *ne (?:l’|) <<- ~>> >


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


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

#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# Destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
#

# Brainfuck (ici, prudence !)
__[i]__  ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y) <<- ~>> >
__[i]__  ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y))) <<- ~>> >
__[i]__  [mts]e +l(?:a|es?) <<- ~>> >
__[i]__  [nmsl]’(?:en|y) <<- ~>> >
__[i]__  l(?:a|es?) +(?:lui|en) <<- ~>> >
__[i]__  lui +(?:la|les?|en|y) <<- not morph(word(-1), ":R", False, True) ~>> >
__[i]__  leur +(?:en|y) <<- not morph(word(-1), ":R", False, False) ~>> >
__[i]__  (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) @@$ <<- ~1>> >
__[i]__  (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
    <<- \1 == "le" and not morph(\2, ":N.*:[me]:[si]") ~1>> >
    <<- \1 == "la" and not morph(\2, ":N.*:[fe]:[si]") ~1>> >
    <<- \1 == "les" and not morph(\2, ":N.*:.:[pi]") ~1>> >
__[i]__  (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- not morph(word(-1), ":R", False, False) ~1>> >
__[i]__  ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- ~1>> >
__[i]__  (?<!’)(en) ({w_2}) @@0,$ <<- morph(\2, ":[123][sp]") ~1>> >
__[i]__  (?:tu|il|on) (en) @@3 <<- not morph(word(-1), ":[123]s", False, False) ~1>> >
__[i]__  (?<!’)elle (en) @@5 <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> >
__[i]__  (?<!’)elles (en) @@6 <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> >
__[i]__  ils (en) @@4 <<- not morph(word(-1), ":3p", False, False) ~1>> >
__[i]__  (?<!’)(y) ({w_2}) @@0,2 <<- morph(\2, ":[123][sp]", False) ~1>> >
__[i]__  (le) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> >
__[i]__  (la) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> >
__[i]__  (l’)({w_2}) @@0,2 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[i]__  (leur) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[s]__  [lL]’a <<- ~>> > a
__[i]__  (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> >
__[i]__  (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> >
__[i]__  (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> >
__[i]__  (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> >
__[i]__  (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- not word(-1) ~1>> >
__[i]__  (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> >
__[i]__  (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i]__  (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i>__  ne [mtsl]’ <<- ~>> >
__[i>__  [mts]e +l’ <<- ~>> >
__[i>__  [nm]’ <<- ~>> >
__[i]__  [nmts]e <<- ~>> >
__<s>__  > +> <<- ~>> >
# Fin du Brainfuck


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#








>
|
|


>
|

>
|

>
|

>
|

>
|

>
|

>
|


>
|


<

>
|

>
|

>
|

>
|

>
|

>
|

>
|

>
|







 







|







 







|







 







>
|


|
>
|




|
|
|



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


|
|
|
|
|
|
<
|
>

>

>
|
>
|
>
|
>
|
>
|
>
|
>
|
>
|
>
|
>
|
>
|
>
|







 







|
|
>
|
>
|
>
|
>
|
>
|
>






>
|


>
|


>
|







 







>
|



>
|


|
<
|
>


>
|


>
|


>
|



>
>
|
>
|


>
|

>
|

>
|


|
|
|
|
>
|
<
>







 







|
|
|
|
|
|
|







 







|
|
|
|
|
|
|
|
|



|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|







1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
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
....
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
....
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
....
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498

4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509

4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
....
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
....
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785

7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825

7826
7827
7828
7829
7830
7831
7832
7833
....
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
....
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
9311
9312
9313
9314
9315
9316
9317
9318
9319
9320
9321
9322
9323
9324
9325
9326
9327
9328
9329
9330
9331
9332
9333
9334
9335
9336
9337
9338
9339
9340
9341
9342
9343
9344
9345
9346


#
# //////////////////////////////////////// DÉSAMBIGUÏSATEUR ////////////////////////////////////////
#

# mots grammaticaux
__[i](d_dans)__
    dans
    <<- not morph(word(-1), ":D.*:p|>[a-z]+ièmes ", False, False) =>> select(\0, ":R")

# verbe
__[i](d_ne_verbe)__
    ne +(?:l(?:es? |eurs? |ui |a |’)|[nv]ous |)({w_1}) @@$
    <<- not morph(\1, ":(?:O[sp]|X)", False) =>> select(\1, ":V")
__[i](d_n_m_t_s_verbe)__
    [nmts]’(?:en +|y +|)({w_1}) @@$
    <<- not morph(\1, ":X", False) =>> select(\1, ":V")
__[i](d_me_te_se_verbe)__
    [mts]e +(?:l(?:es? +|a +|’)|)({w_2})  @@$
    <<- =>> select(\1, ":V")
__[i](d_je_verbe)__
    j’(?:en +|y +|)({w_1}) @@$
    <<- =>> select(\1, ":[123][sp]")
__[i](d_je_il_ils_on_verbe)__
    (?:je|ils?|on) +(?:l(?:es? +|la +|’)|[nv]ous +|)({w_1}) @@$
    <<- not morph(\1, ":(?:Oo|X)", False) =>> select(\1, ":[123][sp]")
__[i](d_tu_verbe)__
    tu +(?:l(?:es? +|la +|’)|[nv]ous +|)({w_1}) @@$
    <<- morph(word(-1), ":Cs", False, True) and not morph(\1, ":(?:Oo|X)", False) =>> select(\1, ":[123][sp]")
__[s](d_nom_propre_verbe)__
    ([A-ZÉÈ]{w_1}) +({w_1})  @@0,$
    <<- morph(\1, ":M") and \2.islower() and morphex(\2, ":[123][sg]", ":Q") and morph(\2, ":N", False) and morph(word(-1), ":Cs", False, True)
    =>> select(\2, ":[123][sp]")
__[i](d_que_combien_pourquoi_en_y_verbe)__
    (?:que?|combien|pourquoi) +(?:en +|y +|)({w_3}) @@$
    <<- =>> exclude(\1, ":E")


# groupe nominal
__[i](d_aucun_non_verbe)__
    aucun +({w_4}) @@$
    <<- morph(\1, ":[NA].*:[me]", False) =>> exclude(\1, ":V")
__[i](d_de_non_verbe)__
    d(?:e +|’)({w_1}) @@$
    <<- not morph(\1, ":[YD]", False) =>> exclude(\1, ":V")
__[i](d_d_un_une_non_verbe)__
    d’une? ({w_1}) @@$
    <<- =>> exclude(\1, ":V")
__[i](d_déterminant_non_verbe)__
    (?:des|chaque|quelques?|cet(?:te|)|m(?:on|a)|[ts]a|aux?) +({w_1}) @@$
    <<- =>> exclude(\1, ":V")
__[i](d_de_la_non_verbe)__
    de l(?:a |’)({w_2}) @@6
    <<- not morph(\1, ":Y", False) =>> exclude(\1, ":V")
__[i](d_de_pronom_non_verbe)__
    de (?:tel(?:le|)s?|ce(?:tte|t|s)|[ts](?:a|es)|m(?:on|a|es)|[nv]o(?:tre|s)|plein) +({w_2})  @@$
    <<- =>> exclude(\1, ":V")
__[i](d_par_non_verbe)__
    par +({w_3}) @@$
    <<- =>> exclude(\1, ":V[123]")
__[i](d_très_non_verbe)__
    très +({w_2}) @@$
    <<- =>> exclude(\1, ":[123][sp]")


TEST: il s’agit d’{{un}} {{anagramme}}
TEST: nul ne sait qui arriva à ce pauvre Paul surpris par la pluie.
TEST: elle finit par être très fière de son fils.

................................................................................
TEST: il y en a peu, voire très peu.
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.



#### Pronoms
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s")                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
    (n(?:e +|’))({w_1})  @@0,$
................................................................................
__[i]__  quant à (?:[mt]oi|lui|elles?|[nv]ous|eux)(?! qui) <<- ~>> *
__[i]__  que ça (?:me|te|l(?:ui|eur)|[nv]ous) plaise ou non <<- ~>> *
__[i]__  que (?:je le veuille|tu le veuilles|vous le vouliez|nous le voulions) ou non <<- ~>> *
__[i]__  qu (?:à cela ne tienne|(?:(?:il|elle|on) le veuille|(?:ils|elles) le veuillent) ou non) <<- ~>> *
__[i]__  quel qu en soit le (?:moyen|prix|risque(?: financier|)|danger) <<- ~>> *
__[i]__  quelle qu en soit la (?:cause|raison) <<- ~>> *
__[i]__  quelque(?: (?:part|temps)|s fois) <<- ~>> *
__[i]__  quelques (?:instants|secondes|minutes|heures|jours|semaines|mois|années|décennies|siècles|millénaires|trimestres|semestres) (?:auparavant|plus (?:tard|tôt)) <<- ~>> *
__[i]__  qui plus est <<- ~>> *
__[i]__  qui (ce (?:jour|matin|après-midi|soir)-là|cette (?:nuit|matinée|soirée)-là) @@4 <<- ~1>> *
__[i]__  quoi qu il (?:(?:arriv|en co[ûu]t)(?:e|ât)|adv(?:ienne|înt)) <<- ~>> *
__[i]__  sans (?:grande|grosse) difficulté(?: apparente| aucune| financière| majeure| particulière|) <<- ~>> *
__[i]__  sans (?:ambages|arrêt|au(?:cun doute|tre forme de procès)|cesse|commune mesure|conteste|coup férir|crier gare|difficulté(?: apparente| aucune| financière| majeure| particulière|)|dire mot|doute|encombres?|états d’âme|fin|foi,? ni loi|l’ombre d’un doute|le (?:faire exprès|vouloir)|mot dire|nul doute|queue ni tête|raison apparente|relâche|(?:grand |)succès|trêve|(?:pour autant |)y (?:prendre g(?:arde|o[ûu]t)|faire attention|parvenir|réussir|réfléchir|songer|penser)|faire de vagues|s’en (?:rendre compte|apercevoir)|l’aide de personne) <<- ~>> *
__[i]__  séance tenante <<- ~>> *
__[i]__  selon (?:toute vraisemblance|(?:[mt]oi|lui|elles?|eux|nous|vous)(?! qui)) <<- ~>> *
................................................................................
# adverbes en -ment
__[i]__  ({w_2}) (l[ea] (?:plus|moins) (\w+ment)) ({w_2})  @@0,w,>2:$,$
    <<- morph(\1, ":[NAQ]", False) and morph(\3, ":W", False) and morph(\4, ":[AQ]", False) ~2>> *
__[i]__  complètement <<- not morph(word(-1), ":D", False, True) ~>> *
__[i]__  (\w+ment)(?: parlant|) @@0 <<- morph(\1, ":W\\b") ~>> *

# couleurs invariables
__[i](p_couleurs_invariables)__
    ({w_2}) +((?:beige|blanc|bleu|brun|châtain|cyan|gris|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet) (?:clair|fluo|foncé|irisé|pâle|pastel|sombre|vif|tendre)) @@0,$
    <<- morph(\1, ":[NAQ]", False) ~2>> *

# locutions adjectivales, nominales & couleurs
__[i](p_locutions_adj_nom_et_couleurs)__
    ({w_2}) +(bas(?: de gamme|se consommation)|bon (?:enfant|marché|teint|chic,? bon genre)|cl(?:é|ef) en mains?|dernier cri|fleur bleue|grand (?:public|luxe)|grandeur nature|haut(?: de gamme|e résolution)|longue (?:distance|portée|durée)|meilleur marché|numéro (?:un|deux|trois|quatre|cinq|six|sept|huit|neuf|dix(?:-sept|-huit|-neuf)|onze|douze|treize|quatorze|quinze|seize|vingt)|plein cadre|top secret|vieux jeu|open source|Créative Commons|pur jus|terre à terre|bleu (?:ciel|marine|saphir|turquoise)|vert (?:émeraude|olive|pomme)|rouge (?:brique|rubis|sang)|jaune sable|blond platine|gris (?:acier|anthracite|perle)|noir (?:d(?:’encre|e jais)|et blanc))
    @@0,$
    <<- morph(\1, ":(?:N|A|Q|V0e)", False) ~2>> *

# tous / tout / toute / toutes
__[i](p_tout_déterminant_masculin)__        (tout) (?:le|cet?|[mts]on) @@0              <<- ~1>> *
__[i](p_toute_déterminant_féminin)__        (toute) (?:la|cette|[mts]a) @@0             <<- ~1>> *
__[i](p_tous_toutes_déterminant_pluriel)__  (tou(?:te|)s) (?:[ldscsmt]es|[nv]os) @@0    <<- ~1>> *


## 1 mot
__[i](p_ailleurs_ainsi)__               ai(?:lleurs|nsi)                            <<- ~>> *
__[i](p_alentour_alors)__               al(?:entour|ors)                            <<- ~>> *
__[i](p_aujourdhui_auparavant)__        au(?:jourd’hui|paravant)                    <<- ~>> *
__[i](p_bientôt)__                      bientôt                                     <<- ~>> *
__[i](p_cependant_certes)__             ce(?:pendant|rtes)                          <<- ~>> *
__[i](p_ci_dessus_dessous)__            ci-desso?us                                 <<- ~>> *
__[i](p_debout_derechef)__              de(?:bout|rechef)                           <<- ~>> *
__[i](p_depuis)__                       (depuis), @@0                              <<- ~1>> *
__[i](p_déjà_désormais)__               dé(?:jà|sormais)                            <<- ~>> *
__[i](p_donc_dorénavant)__              do(?:nc|rénavant)                           <<- ~>> *
__[i](p_enfin_ensuite_encore)__         en(?:fin|suite|core)                        <<- ~>> *
__[i](p_guère)__                        guère                                       <<- ~>> *
__[i](p_jadis)__                        jadis                                       <<- ~>> *
__[i](p_jamais)__                       jamais           <<- not before(r"(?i)\bne +$") ~>> *
__[i](p_loin_longtemps)__               lo(?:in|ngtemps)                            <<- ~>> *
__[i](p_mouais)__                       mouais                                      <<- ~>> *
__[i](p_naguère)__                      n(?:aguère|éanmoins)                        <<- ~>> *
__[i](p_parfois_partout)__              par(?:fois|tout)                            <<- ~>> *
__[i](p_presque_primo)__                pr(?:esque|imo)                             <<- ~>> *
__[i](p_peut_être_plutôt_pourtant)__    p(?:eut-être|lutôt|ourtant)                 <<- ~>> *
__[i](p_quelquefois)__                  quelquefois                                 <<- ~>> *
__[i](p_soudain_souvent)__              sou(?:dain|vent)                            <<- ~>> *
__[i](p_toujours_toutefois)__           tou(?:jours|tefois)                         <<- ~>> *
__[i](p_secondo)__                      secondo                                     <<- ~>> *
__[i](p_sur_le_champ_surtout)__         sur(?:-le-champ|tout)                       <<- ~>> *

__[i](p_tôt_tard_tantôt_tertio_très)__  t(?:ôt|ard|antôt|ertio|rès)                 <<- ~>> *
__[i](p_vite)__                         vite                                        <<- ~>> *
__[i](p_volontiers)__                   volontiers                                  <<- ~>> *

# après
__[i](p_au_fur_et_à_mesure)__           au fur et à mesure                          <<- ~>> *
__<i>(p_oui_non_entre_autres)__         , +(?:oui|non|entre autres),                <<- ~>> *
__<s>(p_virgule_virgule)__              , +,                                        <<- ~>> *
__<s>(p_première_virgule)__             ^ *,                                        <<- ~>> *
__<s>(p_dernière_virgule)__             , *$                                        <<- ~>> *
__<s>(p_tiret_tiret)__                  [—–-] +[—–-]                                <<- ~>> *

__<s>(p_parenthèses_vides)__            [(] +[)]                                    <<- ~>> *
__<s>(p_balise_vide)__                  [<] +[>]                                    <<- ~>> *


# Seconde passe (il faut réorganiser tout le cycle de simplification)
__[i](p_à_nos_yeux)__
    (à (?:[mts]es|[nv]os|leurs) yeux) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *
__[i](p_chaque_année_semaine_journée_décennie)__
    (chaque (?:année|semaine|journée|décennie)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[fe]:[si]|Oo|[123][sp])", False) ~1>> *
__[i](p_chaque_an_jour_mois)__
    (chaque (?:an|jour|mois)) +({w_1}) @@0,$ <<- not morph(\2, ":(?:A.*:[me]:[si]|Oo|[123][sp])", False) ~1>> *
__[i](p_dans_l_ensemble)__
    (dans l’ensemble) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *
__[i](p_de_ce_seul_fait)__
    (de ce (?:seul |)fait) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *
__[i](p_dès_les_premiers_jours_mois_ans)__
    (dès les premiers (?:jours|mois|ans|siècles|trimestres|semestres)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *
__[i](p_dès_les_premières_années_heures_minutes)__
    (dès les premières (?:années|semaines|minutes|secondes|heures|décennies)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *
__[i](p_en_certaines_plusieurs_occasions)__
    (en (?:certaines|quelques|plusieurs|de multiples) occasions) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *
__[i](p_entre_autres_choses)__
    (entre autres choses) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *
__[i](p_quelques_minutes_heures_années_plus_tard)__
    ((?:quelques|plusieurs|de +nombreuses) (?:secondes|minutes|heures|journées|semaines|années|décennies)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[fe]:[pi]", False) ~1>> *
__[i](p_quelques_instants_jours_siècles)__
    ((?:quelques|plusieurs|de +nombreux) (?:instants|moments|jours|mois|ans|siècles)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[pi]", False) ~1>> *
__[i](p_un_moment_instant)__
    (un (?:instant|moment)) +({w_1}) @@0,$ <<- not morph(\2, ":A.*:[me]:[si]", False) ~1>> *


TEST: pourquoi faire compliqué quand on peut faire simple
TEST: Pour ceux et celles qui étaient présents à la cérémonie
TEST: les pires vilénies suite au mauvais vote du peuple
TEST: La numéro 1 mondiale
TEST: cette information n’est rien comparé à cette énorme pression
................................................................................

#__[i]__  ({avoir}) +({w_1}[eiuts])  @@0,$
#    <<- morph(\1, ":V0a", False) and morphex(\1, ":Q", ":G")
#    =>> exclude(\2, ":A")


### Désambiguïsation par séparation de le/la/les avec la suite s’il s’agit de COD dans les syntagmes verbaux
__[i>(p_astuce_je_le_la_les)__
    je l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":1s", False, False) ~1>> @
__[i>(p_astuce_tu_le_la_les)__
    tu l(?:es?|a)( ) @@$               <<- not morph(word(-1), ":2s", False, False) ~1>> @
__[i>(p_astuce_il_elle_on_le_la_les)__
    (?:il|elle|on) l(?:es?|a)( ) @@$   <<- not morph(word(-1), ":3s", False, False) ~1>> @
__[i>(p_astuce_nous_le_la_les)__
    nous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":1p", False, False) ~1>> @
__[i>(p_astuce_vous_le_la_les)__
    vous l(?:es?|a)( ) @@$             <<- not morph(word(-1), ":2p", False, False) ~1>> @
__[i>(p_astuce_ils_elles_le_la_les)__
    (?:ils|elles) l(?:es?|a)( ) @@$    <<- not morph(word(-1), ":3p", False, False) ~1>> @
#__[i>__  [nmts]e l(?:es?|a)( ) @@$          <<- ~1>> @
#__[i]__  l(?:es?|a)( )({w_2}) @@*,$         <<- morph(\2, ":[123][sp]") ~1>> @


### DPP: Désambiguïsation par distinction des mots qui sont à la fois (verbes conjugués ET (noms ET/OU adjectifs))
# Cette distinction est nécessaire seulement pour les mots suivant un groupe nominal.
# Exemples : finis, donne(s), avance(s), bavarde(s)
__[i](p_astuce_désambiguïsation1)__
    (?<![lL]’)une? ({w_2})( ) *({w_2})  @@w,**,$
    <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ")
    ~2>> ~
__[i](p_astuce_désambiguïsation2)__
    (?:d(?:es? |’)|[mts](?:es|on|a) |ce(?:s|t(?:te|)|rtaine?s|) |[nv](?:otre|os) |leurs |quelques ) *({w_2})( ) *({w_2}) @@w,**,$
    <<- isAmbiguousNAV(\3) and morphex(\1, ":[NAQ]", ">telle ") and not re.search("^[dD](?:’une?|e l(?:a|eur)) ", \0)
    ~2>> ~
__[i](p_astuce_désambiguïsation3)__
    l(?:es? |a |’|eur ) *({w_2})( ) *({w_2})  @@w,**,$
    <<- isAmbiguousNAV(\3) and ( morphex(\1, ":[NAQ]", ":V0a") or (morphex(\1, ":[NAQ]", ":(?:3[sp]|V0a)") and not word(-1)) )
    ~2>> ~

TEST: comme le signe évident d’une politique volontaire
TEST: c’était le signe évident d’une politique volontaire
TEST: ce que c’est : le signe évident d’une politique volontaire

................................................................................
__[i]__  aucune? (de [nv]ous|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  aucune? +(des +{w_2}) +ne? @@w <<- ~1>> *
__[i]__  chacune? (de [nv]ous|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  l’une? (de [nv]ous|des [nv]ôtres|d’e(?:ux|lles|ntre (?:[nv]ous|e(?:ux|lles)))) @@$ <<- ~1>> *
__[i]__  la plupart (des {w_2}) @@11 <<- ~1>> *

# groupe déjà partiellement simplifié (selon les règles de la passe 3)
__[i](p_groupes_déjà_simplifiés)__
    (?:a(?:ux?|vec)|à|en)   +d(?:e +(?:la |l’|leurs? |ce(?:s|tte|t|) |[nv]o(?:s|tre) |[mts](?:a|on) |quelques? |certaine?s? )|es? |u ) *({w2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG() ~>> *

## y compris (pas terrible, mais cas difficile)
__[i](p_y_compris)__
    y compris <<- not before(r"(?i)\b(?:[jn]’|tu )$") ~>> *

## eux/nous/vous tous -- elles toutes
__[i](p_nous_vous_tous_toutes_qui)__    [nv]ous (tou(?:te|)s) qui @@5 <<- ~1>> *

__[i](p_eux_tous_qui)__                 eux (tous) qui @@4 <<- ~1>> *
__[i](p_elles_toutes_qui)__             elles (toutes) qui @@6 <<- ~1>> *

## groupe avec préposition
__[i](p_préposition_nom)__
    (?:avec|à|s(?:ur|ous|elon)|c(?:ontre|hez)|dans|envers|p(?:ar|our)|aux?) +({w_2})  @@$
    <<- morphex(\1, ":[NAQ]", ":[GY]") and isEndOfNG()
    ~>> *
__[i](p_préposition_déterminant_nom)__
    (?:avec|à|s(?:ur|ous|elon)|c(?:ontre|hez)|dans|envers|p(?:ar|our)) +(?:les? |la |l’|de(?:s| la|) |ce[st]? |cette |[mts](?:es|on|a) |[nv]o(?:s|tre) |leurs? |certaine?s? |quelques ) *({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG()
    ~>> *
__[i](p_lors_de_du_nom)__
    lors d(?:’|e(?:s| la|) |u ) *({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG()
    ~>> *

## doute que
__[i](p_nul_doute_que)__
    nul doute qu  <<- not word(-1) ~>> *
__[i](p_douter_que)__
    (dout\w+)( ) *que?  @@0,*  <<- morph(\1, ">douter ", False) and before(r"(?i)\b(?:[mts]e|[nv]ous) +$") ~2>> ,

## de +
__[i](p_de_nom)__
    d(?:e +|’)(?!autres)({w_2}) @@$
    <<- morphex(\1, ":N", ":[GY]") and isEndOfNG() ~>> *
__[i](p_de_pronom_nom)__
    de (?:ce(?:t|tte|s|)|[mts](?:on|a|es)|[nv](?:otre|os)|leurs) +({w_2})  @@$
    <<- morph(\1, ":[NAQ]", False) and isEndOfNG() ~>> *
__[i](p_de_la_leur_nom)__
    de l(?:a|eur) +({w_2})  @@$
    <<- morphex(\1, ":[NAQ]", ":Y") and isEndOfNG() ~>> *

__[s](p_virgule_virgule2)__     , +, <<- ~>> *
__[s](p_première_virgule2)__    ^ *, <<- ~>> *
__[s](p_dernière_virgule2)__    , *$ <<- ~>> *
__[s](p_tiret_tiret2)__         [—–-] +[—–-] <<- ~>> *
__[s](p_parenthèses_vides2)__   [(] +[)] <<- ~>> *
__[s](p_balise_vide2)__         [<] +[>] <<- ~>> *




TEST: tandis que d’autres perçoivent le bon goût de la soupe.
TEST: Je me doute bien que vous avez trouvé la réponse.
TEST: Nous nous doutons bien qu’il y a une entourloupe derrière cette affaire.


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



#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
#

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `
__<i](p_premier_ne_pro_per_obj1)__  ^ *ne l(?:es?|a) l(?:ui|eur) <<- ~>> >
__<i](p_premier_ne_pro_per_obj2)__  ^ *ne (?:[mt]’|l(?:ui|eur) )en <<- ~>> >
__<i](p_premier_ne_pro_per_obj3)__  ^ *ne (?:[mt]e|[nv]ous) (?:les?|la|en) <<- ~>> >
__<i](p_premier_ne_pro_per_obj4)__  ^ *ne +(?:en|l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous) <<- ~>> >
__<i>(p_premier_ne_pro_per_obj5)__  ^ *n’(?:en |y |) <<- ~>> >
__<i>(p_premier_ne_pro_per_obj6)__  ^ *ne (?:l’|) <<- ~>> >


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


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

#
# //////////////////////////////////////// PRÉPROCESSEUR ////////////////////////////////////////
# Destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
#

# Brainfuck (ici, prudence !)
__[i](p_pro_per_obj01)__    ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y) <<- ~>> >
__[i](p_pro_per_obj02)__    ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y))) <<- ~>> >
__[i](p_pro_per_obj03)__    [mts]e +l(?:a|es?) <<- ~>> >
__[i](p_pro_per_obj04)__    [nmsl]’(?:en|y) <<- ~>> >
__[i](p_pro_per_obj05)__    l(?:a|es?) +(?:lui|en) <<- ~>> >
__[i](p_pro_per_obj06)__    lui +(?:la|les?|en|y) <<- not morph(word(-1), ":R", False, True) ~>> >
__[i](p_pro_per_obj07)__    leur +(?:en|y) <<- not morph(word(-1), ":R", False, False) ~>> >
__[i](p_pro_per_obj08)__    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) @@$ <<- ~1>> >
__[i](p_pro_per_obj09)__    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
    <<- \1 == "le" and not morph(\2, ":N.*:[me]:[si]") ~1>> >
    <<- \1 == "la" and not morph(\2, ":N.*:[fe]:[si]") ~1>> >
    <<- \1 == "les" and not morph(\2, ":N.*:.:[pi]") ~1>> >
__[i](p_pro_per_obj10)__    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- not morph(word(-1), ":R", False, False) ~1>> >
__[i](p_pro_per_obj11)__    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- ~1>> >
__[i](p_pro_per_obj12)__    (?<!’)(en) ({w_2}) @@0,$ <<- morph(\2, ":[123][sp]") ~1>> >
__[i](p_pro_per_obj13)__    (?:tu|il|on) (en) @@3 <<- not morph(word(-1), ":[123]s", False, False) ~1>> >
__[i](p_pro_per_obj14)__    (?<!’)elle (en) @@5 <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> >
__[i](p_pro_per_obj15)__    (?<!’)elles (en) @@6 <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> >
__[i](p_pro_per_obj16)__    ils (en) @@4 <<- not morph(word(-1), ":3p", False, False) ~1>> >
__[i](p_pro_per_obj17)__    (?<!’)(y) ({w_2}) @@0,2 <<- morph(\2, ":[123][sp]", False) ~1>> >
__[i](p_pro_per_obj18)__    (le) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> >
__[i](p_pro_per_obj19)__    (la) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> >
__[i](p_pro_per_obj20)__    (l’)({w_2}) @@0,2 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[i](p_pro_per_obj21)__    (leur) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >
__[s](p_pro_per_obj22)__    [lL]’a <<- ~>> > a
__[i](p_pro_per_obj23)__    (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> >
__[i](p_pro_per_obj24)__    (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> >
__[i](p_pro_per_obj25)__    (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> >
__[i](p_pro_per_obj26)__    (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> >
__[i](p_pro_per_obj27)__    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- not word(-1) ~1>> >
__[i](p_pro_per_obj28)__    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> >
__[i](p_pro_per_obj29)__    (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i](p_pro_per_obj30)__    (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i>(p_pro_per_obj31)__    ne [mtsl]’ <<- ~>> >
__[i>(p_pro_per_obj32)__    [mts]e +l’ <<- ~>> >
__[i>(p_pro_per_obj33)__    [nm]’ <<- ~>> >
__[i](p_pro_per_obj34)__    [nmts]e <<- ~>> >
__<s>(p_pro_per_obj35)__    > +> <<- ~>> >
# Fin du Brainfuck


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#