︙ | | |
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
|
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
|
-
+
+
-
-
-
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
|
# disambiguation
if bDebug:
print(" DISAMBIGUATOR:\n ", dRule[sRuleId])
globals()[sWhat](self.lToken, nTokenOffset)
elif cActionType == ">":
# we do nothing, this test is just a condition to apply all following actions
if bDebug:
print(" COND_OK")
print(" COND_OK: ", sRuleId)
pass
elif cActionType == "/":
# Tag
if bDebug:
print(" SEMANTIC_TAG:\n ", dRule[sRuleId])
nTokenStart = nTokenOffset + eAct[0]
nTokenEnd = nTokenOffset + (eAct[1] if eAct[1] else eAct[0])
print(" TAG:\n ", dRule[sRuleId])
nTokenStart = nTokenOffset + eAct[0] if eAct[0] > 0 else nLastToken + eAct[0]
nTokenEnd = nTokenOffset + eAct[1] if eAct[1] > 0 else nLastToken + eAct[1]
for i in range(nTokenStart, nTokenEnd+1):
if "tags" in self.lToken[i]:
self.lToken[i]["tags"].update(sWhat.split("|"))
else:
self.lToken[i]["tags"] = set(sWhat.split("|"))
if sWhat not in self.dTags:
self.dTags[sWhat] = [nTokenStart, nTokenStart]
else:
self.dTags[sWhat][0] = min(nTokenStart, self.dTags[sWhat][0])
self.dTags[sWhat][1] = max(nTokenEnd, self.dTags[sWhat][1])
elif cActionType == "%":
# sentence tags
# immunity
if bDebug:
print(" SENTENCE_TAG:\n ", dRule[sRuleId])
nTokenTag = nTokenOffset + eAct[0]
if sWhat not in self.dTags:
self.dTags[sWhat] = (nTokenTag, nTokenTag)
elif nTokenTag > self.dTags[sWhat][1]:
self.dTags[sWhat] = (self.dTags[sWhat][0], nTokenTag)
nTokenStart = nTokenOffset + eAct[0] if eAct[0] > 0 else nLastToken + eAct[0]
nTokenEnd = nTokenOffset + eAct[1] if eAct[1] > 0 else nLastToken + eAct[1]
if nTokenEnd - nTokenStart == 0:
self.lToken[nTokenStart]["bImmune"] = True
nErrorStart = self.nOffsetWithinParagraph + self.lToken[nTokenStart]["nStart"]
if nErrorStart in self.dError:
del self.dError[nErrorStart]
else:
for i in range(nTokenStart, nTokenEnd+1):
self.lToken[i]["bImmune"] = True
nErrorStart = self.nOffsetWithinParagraph + self.lToken[i]["nStart"]
if nErrorStart in self.dError:
del self.dError[nErrorStart]
else:
print("# error: unknown action at " + sLineId)
elif cActionType == ">":
if bDebug:
print(" COND_BREAK")
break
except Exception as e:
|
︙ | | |
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
|
925
926
927
928
929
930
931
932
933
934
935
936
937
938
|
-
-
-
-
-
-
-
|
self.lToken[nTokenRewriteStart]["bToRemove"] = True
else:
for i in range(nTokenRewriteStart, nTokenRewriteEnd+1):
self.lToken[i]["bToRemove"] = True
elif sWhat == "␣":
# merge tokens
self.lToken[nTokenRewriteStart]["nMergeUntil"] = nTokenRewriteEnd
elif sWhat == "!":
# immunity
if nTokenRewriteEnd - nTokenRewriteStart == 0:
self.lToken[nTokenRewriteStart]["bImmune"] = True
else:
for i in range(nTokenRewriteStart, nTokenRewriteEnd+1):
self.lToken[i]["bImmune"] = True
elif sWhat == "_":
# neutralized token
if nTokenRewriteEnd - nTokenRewriteStart == 0:
self.lToken[nTokenRewriteStart]["sNewValue"] = "_"
else:
for i in range(nTokenRewriteStart, nTokenRewriteEnd+1):
self.lToken[i]["sNewValue"] = "_"
|
︙ | | |
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
|
968
969
970
971
972
973
974
975
976
977
978
979
980
981
|
-
-
-
-
-
-
|
print("REWRITE")
lNewToken = []
nMergeUntil = 0
dTokenMerger = None
for iToken, dToken in enumerate(self.lToken):
bKeepToken = True
if dToken["sType"] != "INFO":
if "bImmune" in dToken:
nErrorStart = self.nOffsetWithinParagraph + dToken["nStart"]
if nErrorStart in self.dError:
if bDebug:
print("immunity -> error removed:", self.dError[nErrorStart])
del self.dError[nErrorStart]
if nMergeUntil and iToken <= nMergeUntil:
dTokenMerger["sValue"] += " " * (dToken["nStart"] - dTokenMerger["nEnd"]) + dToken["sValue"]
dTokenMerger["nEnd"] = dToken["nEnd"]
if bDebug:
print(" MERGED TOKEN:", dTokenMerger["sValue"])
bKeepToken = False
if "nMergeUntil" in dToken:
|
︙ | | |
︙ | | |
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
|
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
|
-
+
|
<<- />> -là
!!!! Immunity !!
__n_importe_qui_quoi__
n’ importe [qui|quoi]
<<- ~2>> !
<<- %2>>
@@@@
@@@@
@@@@
@@@@
|
︙ | | |
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
|
6345
6346
6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
|
-
+
|
TEST: Je propse que, par {{voix}} de conséquence, nous partions immédiatement.
TEST: C’est une {{voix}} interdite.
# voir / voire
__conf_voir_voire__
voir [grand|petit|rouge]
<<- ~2>> !
<<- %2>>
voir @:A¬:[NGM]
<<- /conf/ not \2.istitle() and not morph(<1, ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|de)/")
and not before(r"(?i)\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$")
-1>> voir # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez :|https://fr.wiktionary.org/wiki/voire
[comme|lorque|puisque|quand|que|quoique|si] (voire)
|
︙ | | |
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
|
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
|
-
+
|
TEST: Nous vous donnons rendez-vous {{Mercredi}} le 18.
# Les mois
__maj_mois__
monarchie de Juillet
révolution d’ Octobre
<<- ~3>> !
<<- %3>>
*WORD [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor]
<<- /maj/ not morph(\1, ":M1") -2:>> =\2.lower()
# Pas de majuscule sur les mois.|http://www.academie-francaise.fr/la-langue-francaise/questions-de-langue#42_strong-em-jours-de-la-semaine-pluriel-et-majuscules-em-strong
[*NUM|*WORD_ELIDED] [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor]
, [Janvier|Février|Avril|Mai|Juin|Juillet|Août|Aout|Septembre|Octobre|Novembre|Décembre|Vendémiaire|Brumaire|Frimaire|Nivôse|Pluviôse|Ventôse|Germinal|Floréal|Prairial|Messidor|Thermidor|Fructidor]
|
︙ | | |
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
|
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
|
-
+
|
TEST: ils viendront en {{Mars}}. ->> mars
TEST: le comité d’éthique qui statuera dans les meilleurs délais sur la situation de Véronique Avril
# Les États
__maj_État__
en fonction de l’ état
<<- ~5>> !
<<- %5>>
état [français|belge|suisse|canadien|palestinien|souverain|américain|russe|anglais|allemand|espagnol|italien|mexicain|japonais|chinois|australien|polonais|membre|africain|européen|asiatique|voyou|démocratique|totalitaire|fédéral|fédéré|capitaliste|communiste|providence|nation]
<<- /maj/ \1 == "état" -1>> État # Majuscule manquante : si vous parlez de l’institution dirigeante d’une nation, écrivez “État”.
états [français|>belge|>suisse|canadien|canadiens|palestinien|palestiniens|souverain|souverains|>membre|américain|américains|africain|africains|européen|européens|>asiatique|>voyou|>démocratique|>totalitaire|>fédérale|>fédérée|>capitaliste|>communiste|>providence|>nation]
<<- /maj/ \1 == "états" -1>> États # Majuscule manquante : si vous parlez de l’institution dirigeante d’une nation, écrivez “État”.
|
︙ | | |
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
|
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
|
-
+
|
TEST: C’est une prérogative de l’{{état-nation}} ->> État-nation
# gentilés / ethnonymes
__maj_gentilés__
océan Indien
[îles|iles] Britanniques
<<- ~2>> !
<<- %2>>
*WORD [>afghane|>albanaise|>algérienne|>allemande|>américaine|>andorrane|>anglais|>angolaise|>arabe|>argentine|>arménienne|>australienne|>autrichienne|>asiatique|>azerbaïdjanaise|>bahamienne|>bangladaise|>bengladeshie|>barbadienne|>basque|>belge|>bélizienne|>béninoise|>bretonne|>bhoutanaise|>biélorusse|>birmane|>bolivienne|>bosnienne|>botswanaiso|>brésilienne|>britannique|>brunéiene|>bulgare|>burkinabé|>burundaise|>cambodgienne|>camerounaise|>canadienne|>capverdienne|>centrafricaine|>chilienne|>chinoise|>chypriote|>colombienne|>comorienne|>congolaise|>nord-coréenne|>corse|>costaricienne|>croate|>cubaine|>danoise|>djiboutienne|>dominicaine|>égyptienne|>émiratie|>équatorienne|>érythréenne|>estonienne|>espagnole|>étatsunienne|>états-unienne|>étasunienne|>éthiopienne|>fidjienne|>finlandaise|>formosane|>française|>gabonaise|>gambienne|>géorgienne|>ghanéenne|>grecque|>grenadienne|>guadeloupéenne|>guatémaltèque|>guinéenne|>équato-guinéenne|>guyanienne|>haïtienne|>honduriene|>hollandaise|>hongroise|>indienne|>indochinoise|>indonésienne|>irakienne|>italienne|>iranienne|>irlandaise|>islandaise|>israélienne|>ivoirienne|>jamaïcaine|>japonaise|>jordanienne|>kazakhe|>kényane|>kosovare|>koweïtienne|>laotienne|>lapone|>lettone|>libanaise|>libérienne|>libyenne|>liechtensteinoise|>lituanienne|>luxembourgeois|>macédonienne|>maghrébine|>malgache|>malaisienne|>malawite|>maldivienne|>malienne|>maltaise|>maorie|>marocaine|>martienne|>mauricienne|>mauritanienne|>mexicaine|>micronésienne|>moldave|>monégasque|>monténégrine|>mongole|>mozambicaine|>namibiene|>népalaise|>nicaraguayenne|>nigérienne|>nigériane|>néerlandaise|>norvégienne|>néo-zélandaise|>ougandaise|>ouzbèke|>pakistanaise|>palestinienne|>panaméenne|>paraguayenne|>perse|>péruvienne|>philippine|>polonaise|>polynésienne|>portugaise|>québécoise|>qatarie|>roumaine|>russe|>rwandaise|>saoudienne|>scandinave|>salvadorienne|>sénégalaise|>serbe|>singapourienne|>slovaque|>slovène|>somalienne|>soudanaise|>soviétique|>srilankaise|>suédoise|>suisse|>surinamaise|>syrienne|>sud-africaine|>sud-coréenne|>américaine|>tadjike|>tanzanienne|>tchadienne|>tchèque|>thaïlandaise|>togolaise|>tahitienne|>tunisiene|>turkmène|>turque|>taïwanaise|>ukrainienne|>uruguayenne|>vénézuélienne|>vietnamienne|>yéménite|>yougoslave|>zaïroise|>zambienne|>zimbabwéenne]
<<- /maj/ \2.istitle() and morph(\1, ":N", ":(?:A|V0e|D|R|B)") -2:>> =\2.lower() # S’il s’agit d’un adjectif, ne mettez pas de majuscule.
<<- /maj/ \2.islower() and not \2.startswith("canadienne") and
( value(\1, "|certains|certaines|ce|cet|cette|ces|des|les|nos|vos|leurs|quelques|plusieurs|chaque|une|aux|") or
( value(\1, "|un|") and not value(<1, "|dans|numéro|") and not after("(?:approximatif|correct|courant|parfait|facile|aisé|impeccable|incompréhensible)") ) )
-2>> =\2.capitalize() # S’il s’agit d’un gentilé, mettez une majuscule.
|
︙ | | |
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
|
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
|
-
+
-
+
|
__rendez_vous__
ne [le|la|les] [lui|leur] (rendez-vous)
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>> !
<<- %1>>
# [un|mon|ton|son|ce|mes|tes|ses|leurs] rendez-vous
# rendez-vous seulement défini comme :N:m:i
!!
!!
!!!! Pronoms + incohérences !!
!!
!!
__m_enfin__
m’ enfin
<<- ~2>> !
<<- %2>>
<<- ~>> *
__non_verbe_après_préverbes__
[ne|n’] [le|la|l’|les] [lui|leur|en|y] @:[NAQ]¬:(?:[123][sp]|Y|P|Oo|X)
[ne|n’] [lui|leur] en @:[NAQ]¬:(?:[123][sp]|Y|P|Oo|X)
<<- /conf/ -4>> =suggSimil(\4, ":(?:[123][sp]|Y)", False) # Incohérence avec « \1 \2 \3 » : « \4 » devrait être un verbe.
|
︙ | | |
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
|
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
|
-
+
-
+
-
+
-
+
-
+
-
+
|
TEST: t’en voilà débarrassée.
TEST: N’oublient-ils pas ce qu’ils étaient autrefois…
TEST: Ne presque jamais réussir un plat aussi simple, c’est de l’incompétence pure et simple.
__loc_notre_père_qui_es_au_cieux__
notre père qui [es|est] aux cieux
<<- ~4>> !
<<- %4>>
<<- ~3:0>> *
!!
!!
!!!! Formes verbales sans sujet !!
!!
!!
__tag_sujets__
[je|j’]
[moi|moi-même] qui
[moi|moi-même] [seul|seule]
<<- %>> 1s
<<- />> 1s
tu
t’ @:2s
t’ [en|y] @:2s
[toi|toi-même] ?,¿ qui
[toi|toi-même] [seul|seule]
<<- %>> 2s
<<- />> 2s
nous
nous ?,¿ qui
nous-même
nous-mêmes
nous [seul|seuls|seules]
[et|ou] [moi|moi-même]
ni [moi|moi-même]
[moi|moi-même] et
<<- %>> 1p
<<- />> 1p
vous
vous ?,¿ qui
vous-même
vous-mêmes
vous [seul|seule|seuls|seules]
[et|ou] [toi|toi-même]
ni [toi|toi-même]
[toi|toi-même] et
<<- %>> 2p
<<- />> 2p
__tag_prop_sub__
ce [que|qu’|qu]
<<- %>> ce_que
<<- />> ce_que
## Incohérences avec formes verbales 1sg et 2sg sans sujet
__conj_xxxai__sans_sujet!3__
[se|s’] ?[en|y|le|la|l’|les]¿ (~ai$)
<<- /conj/ morph(\1, ":1s", ":(?:G|W|M|J|3[sp])")
|
︙ | | |
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
|
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
|
-
+
|
TODO: comme
__purge_locutions_latines__
[a|à] [priori|postériori|posteriori|contrario|cappella|minima]
<<- ~>> *
<<- ~1>> !
<<- %1>>
ab [absurdo|initio]
ad [hoc|hominem|infinitum|nauseam|valorem|patres]
ad vitam æternam
ex [nihilo|cathedra|absurdo|abrupto]
id est
in [abstracto|extenso|extremis|fine|petto|situ|utero|vitro|vivo]
|
︙ | | |
11712
11713
11714
11715
11716
11717
11718
11719
11720
11721
11722
11723
11724
11725
11726
|
11712
11713
11714
11715
11716
11717
11718
11719
11720
11721
11722
11723
11724
11725
11726
|
-
+
|
__conf_cour_cours_court_courre__
au [cour|court|courre|courres|courts] [de|d’|des|du]
<<- /conf/ -2>> cours # Confusion. Locution “au cours de”. Une cour… Un cours… Adjectif : court(e).
en cour martiale
en cour [de|d’] [cassation|justice]
en cour d’ [>assise]
<<- ~1:2>> !
<<- %1:2>>
en cour
<<- /conf/ ->> en cours # Confusion probable. Une cour… Un cours… Adjectif : court(e).
>couper [cour|cours|courre|courres|courts]
<<- /conf/ -2>> court # “Couper court” qui signifie écourter. Une cour… Un cours… Adjectif : court(e).
|
︙ | | |