Comment: | merge trunk |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | comdic |
Files: | files | file ages | folders |
SHA3-256: |
8ca82c9a7e77f0e76e1663de06364a73 |
User & Date: | olr on 2019-03-15 14:00:47 |
Other Links: | branch diff | manifest | tags |
2019-03-15
| ||
14:08 | [fx] fix merge Closed-Leaf check-in: e8375db0be user: olr tags: fx, comdic | |
14:00 | merge trunk check-in: 8ca82c9a7e user: olr tags: comdic | |
12:54 | [fr] faux positif check-in: 220c5d2bfc user: olr tags: trunk, fr | |
2019-02-25
| ||
12:11 | [fx] init: observePage, set this check-in: a7c123cfd6 user: olr tags: fx, comdic | |
Modified doc/build.md from [a9bb1bbf94] to [783266048e].
1 2 3 4 5 6 7 8 9 | # How to build Grammalecte ## Required ## * Python 3.6 * Firefox Nightly * NodeJS * npm | > < | < | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | # How to build Grammalecte ## Required ## * Python 3.6 * Firefox Developper * Firefox Nightly * NodeJS * npm * web-ext : `https://developer.mozilla.org/fr/Add-ons/WebExtensions/Getting_started_with_web-ext` * Thunderbird ## Commands ## **Build a language** `make.py LANG` > Generate the LibreOffice extension and the package folder. > LANG is the lang code (ISO 639). > This script uses the file `config.ini` in the folder `gc_lang/LANG`. **First build** `make.py LANG -js` > This command is required to generate all necessary files. |
︙ | ︙ | |||
50 51 52 53 54 55 56 | `-i --install` > Install the LibreOffice extension. `-fx --firefox` | | | | | | 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | `-i --install` > Install the LibreOffice extension. `-fx --firefox` > Launch Firefox Developper. > Unit tests can be launched from the menu (Tests section). `-we --webext` > Launch Firefox Nightly. > Unit tests can be launched from the menu (Tests section). `-tb --thunderbird` > Launch Thunderbird. ## Examples ## |
︙ | ︙ |
Modified doc/syntax.txt from [223b361257] to [f728cc54d9].
1 2 | WRITING RULES FOR GRAMMALECTE | | | > > > > > | | > > | > > | > > > > > > > > > > > > | > | | > > > > > > > > > > > > > > | | > | 1 2 3 4 5 6 7 8 9 10 11 12 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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | WRITING RULES FOR GRAMMALECTE Note: This documentation is a draft. Information may be obsolete or incomplete. # Principles # Grammalecte is a bi-passes grammar checker engine. On the first pass, the engine checks the text paragraph by paragraph. On the second pass, the engine check the text sentence by sentence. The command to switch to the second pass is `[++]`. In each pass, you can write as many rules as you need. There are two kinds of rules: * regex rules (triggered by a regular expression) * token rules (triggered by a succession of tokens) A regex rule is defined by: * [optional] flags “LCR” for the regex word boundaries and case sensitiveness * a regex pattern trigger * a list of actions * [optional] option name (the rule is active only if the option defined by user or config is active) * [optional] rule name (named rules can be disabled by user or by config) A token rules is defined by: * rule name * one or several lists of tokens (triggers) * a list of actions (the action is active only if the option defined by user or config is active) Token rules must be defined within a graph. Each graph is defined within the second pass with the command: @@@@GRAPH: graph_name A graph ends when another graph is defined or when is found the command: @@@@END_GRAPH There is no limit to the number of actions and the type of actions a rule can launch. Each action has its own condition to be triggered. There are several kinds of actions: * Error warning, with a message, and optionally suggestions, and optionally an URL * Text transformation, modifying internally the checked text * Disambiguation action, setting tags on a position * Tagging The rules file for your language must be named `rules.grx`. The settings file must be named `config.ini`. All these files are simple utf-8 text file. UTF-8 is mandatory. # Comments # Lines beginning with `#` are comments. # End of file # With the command: #END at the beginning of a line, the parser won’t go further. Whatever is written after will be considered as comments. # Regex rule syntax # __LCR/option(rulename)__ pattern <<- condition ->> error_suggestions # message_error|http://awebsite.net... <<- condition ~>> text_rewriting <<- condition =>> commands_for_disambiguation ... Patterns are written with the Python syntax for regular expressions: http://docs.python.org/library/re.html |
︙ | ︙ | |||
137 138 139 140 141 142 143 | Examples: __<s>__ pattern <<- condition ->> replacement # message <<- condition ->> suggestion # message | | < < < < < < < < < < < < < < < < | > > > > > > > > > > > > | 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | Examples: __<s>__ pattern <<- condition ->> replacement # message <<- condition ->> suggestion # message <<- condition ~>> text_rewriting <<- =>> disambiguation __<s>__ pattern <<- condition ->> replacement # message ## Whitespaces at the border of patterns or suggestions ## Example: Recognize double or more spaces and suggests a single space: __<s>__ " +" <<- ->> " " # Extra space(s). Characters `"` protect spaces in the pattern and in the replacement text. ## Pattern groups and back references ## It is usually useful to retrieve parts of the matched pattern. We simply use parenthesis in pattern to get groups with back references. Example. Suggest a word with correct quotation marks: \"(\w+)\" <<- ->> “\1” # Correct quotation marks. Example. Suggest the missing space after the !, ? or . signs: __<i]__ \b([?!.])([A-Z]+) <<- ->> \1 \2 # Missing space? Example. Back reference in messages. (fooo) bar <<- ->> foo # “\1” should be: ## Pattern matching ## Repeating pattern matching of a single rule continues after the previous matching, so instead of general multiword patterns, like (\w+) (\w+) <<- some_check(\1, \2) ->> \1, \2 # foo use (\w+) <<- some_check(\1, word(1)) ->> \1, # foo ## Name definitions ## Grammalecte supports name definitions to simplify the description of the complex rules. Example: |
︙ | ︙ | |||
298 299 300 301 302 303 304 305 306 307 | Mr(. [A-Z]\w+) <<- ~1>> * You can also call Python expressions. __[s]__ Mr. ([a-z]\w+) <<- ~1>> =\1.upper() # Disambiguation # | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | < < < < | < | 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 | Mr(. [A-Z]\w+) <<- ~1>> * You can also call Python expressions. __[s]__ Mr. ([a-z]\w+) <<- ~1>> =\1.upper() # Text preprocessing and multi-passes checking # On each pass, Lightproof uses rules written in the text preprocessor to modify internally the text before checking the text. The text preprocessor is useful to simplify texts and write simplier checking rules. For example, sentences with the same grammar mistake: These “cats” are black. These cats are “black”. These cats are absolutely black. These stupid “cats” are all black. These unknown cats are as per usual black. Instead of writting complex rules or several rules to find mistakes for all possible cases, you can use the text preprocessor to simplify the text. To remove the chars “”, write: [“”] ->> * The * means: replace text by whitespaces. Similarly to grammar rules, you can add conditions: \w+ly <<- morph(\0, "adverb") ->> * You can also remove a group reference: these (\w+) (\w+) <<- morph(\1, "adjective") and morph(\2, "noun") -1>> * (am|are|is|were|was) (all) <<- -2>> * With these rules, you get the following sentences: These cats are black. These cats are black . These cats are black. These cats are black. These cats are black. These grammar mistakes can be detected with one simple rule: these +(\w+) +are +(\w+s) <<- morph(\1, "noun") and morph(\2, "plural") -2>> _ # Adjectives are invariable. Instead of replacing text with whitespaces, you can replace text with @. https?://\S+ ->> @ This is useful if at first pass you write rules to check successive whitespaces. @ are automatically removed at the second pass. You can also replace any text as you wish. Mister <<- ->> Mr (Mrs?)[.] <<- ->> \1 # Disambiguation # When Grammalecte analyses a word with morph, before requesting the POS tags to the dictionary, it checks if there is a stored marker for the position where the word is. If there is a marker, Grammalecte uses the stored data and don’t make request to the dictionary. The disambiguation commands store POS tags at the position of a word. There is 3 commands for disambiguation. `select(n, pattern)` > stores at position n only the POS tags of the word matching the pattern. `exclude(n, pattern)` > stores at position n the POS tags of the word, except those matching the pattern. `define(n, [definitions])` > stores at position n the POS tags in definitions (a list of strings). Examples: =>> select(\1, "po:noun is:pl") =>> exclude(\1, "po:verb") =>> define(\1, ["po:adv"]) =>> exclude(\1, "po:verb") and define(\2, ["po:adv"]) and select(\3, "po:adv") Note: select, exclude and define ALWAYS return True. If select and exclude generate an empty list, no marker is set. With define, you must set a list of POS tags. Example: define(\1, ["po:nom is:plur", "po:adj is:sing", "po:adv"]) # Conditions # Conditions are Python expressions, they must return a value, which will be evaluated as boolean. You can use the usual Python syntax and libraries. |
︙ | ︙ | |||
387 388 389 390 391 392 393 | > checks if the text before the pattern matches the regex. `textarea(regex[, neg_regex])` > checks if the full text of the checked area (paragraph or sentence) matches the regex. | | | | | | | | > | | | < < | | < < > < < > | | | < | < < < < < | < < | < < | < < | < < | < < | | | | < < < | < < < | < < | < < < | < < | | < < | | | < < < | < | < | < | 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 | > checks if the text before the pattern matches the regex. `textarea(regex[, neg_regex])` > checks if the full text of the checked area (paragraph or sentence) matches the regex. `morph(n, regex[, neg_regex][, no_word=False])` > checks if all tags of the word in group n match the regex. > if neg_regex = "*", returns True only if all morphologies match the regex. > if there is no word at position n, returns the value of no_word. `analyse(n, regex[, neg_regex][, no_word=False])` > checks if all tags of the word in group n match the regex. > if neg_regex = "*", returns True only if all morphologies match the regex. > if there is no word at position n, returns the value of no_word. `option(option_name)` > returns True if option_name is activated else False Note: the analysis is done on the preprocessed text. # Default variables # `sCountry` > It contains the current country locale of the checked paragraph. colour <<- sCountry == "US" ->> color # Use American English spelling. # Expressions in the suggestions # Suggestions started by an equal sign are Python string expressions extended with possible back references and named definitions: Example: <<- ->> = '"' + \1.upper() + '"' # With uppercase letters and quotation marks # Token rules Token rules must be defined within a graph. ## Tokens Tokens can be defined in several ways: * Value (meaning the text of the token). Examples: `word`, `<start>`, `<end>`, `,`. * Lemma: `>lemma`. * Regex: `~pattern`, `~pattern¬antipattern`. * Regex on morphologies: `@pattern`, `@pattern¬antipattern`. * Tags: `/tag`. * Metatags: *NAME. Examples: `*WORD`, `*NUM`, `*SIGN`, etc. Selection of tokens: `[token1|token2|>lemma1|>lemma2|~pattern1|@pattern1|…]` Conditional token: `?token¿` Conditional selection of token: `?[token1|token2|…]¿` ## Token references Positive references are defined by a positive integer `>= 1`. Examples: \1, \2, \3, etc. If there is at least one token set between parenthesis, these numbers refer to tokens between parenthesis, ignoring all others. If there is no token between parenthesis, these numbers refer to tokens found in order defined by the rule triggered. Negative references are defined by a negative integer `<= -1`. Examples: \-1, \-2, \-3, etc. These numbers refer to the tokens beginning by the last one found by the rule triggered. Examples: tokens: alpha beta gamma delta epsilon positive refs: 1 2 3 4 5 negative refs: -5 -4 -3 -2 -1 tokens: alpha (beta) gamma (delta) epsilon positive refs: 1 2 negative refs: -5 -4 -3 -2 -1 tokens: alpha (beta) ?gamma¿ (delta) epsilon positive refs: 1 2 negative refs: (-4/-5) (-3/-4) (-3/none) -2 -1 |
Modified gc_lang/fr/data/phonet_simil.txt from [ca29dea7ac] to [5777b23ae3].
︙ | ︙ | |||
196 197 198 199 200 201 202 203 204 205 206 207 208 209 | convaincs convainc convins convint convaincant convaincants convainquant convergeant convergent convergents convoi convois convoie convoies convoient cool cools coule coules coulent coq coqs coque coques coke cokes cor cors corps coron corons corromps corrompt corset corsets corser corsé cote cotes cotent côte côtes cotte cottes côté côtés coter cou cous coût coûts cout couts coup coups coud couds coucher couchers coule coules coulent cool | > | 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | convaincs convainc convins convint convaincant convaincants convainquant convergeant convergent convergents convoi convois convoie convoies convoient cool cools coule coules coulent coq coqs coque coques coke cokes cor cors corps cornée cornées corner cornet cornets coron corons corromps corrompt corset corsets corser corsé cote cotes cotent côte côtes cotte cottes côté côtés coter cou cous coût coûts cout couts coup coups coud couds coucher couchers coule coules coulent cool |
︙ | ︙ | |||
513 514 515 516 517 518 519 520 521 522 523 524 525 526 | mu mus mû mue mues muent nais nait nez né née navigant navigants naviguant nécessité nécessités nécessiter négligeant négligent négligents ni nid nids nie nies nient niais niait niaient nô nos noix noie noies noient noua nouas nom noms non nome nomes nomme nommes nomment notre nôtre nôtres nourrice nourrices nourrisse nourrisses nourrissent nous noue noues nouent | > | 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 | mu mus mû mue mues muent nais nait nez né née navigant navigants naviguant nécessité nécessités nécessiter négligeant négligent négligents ni nid nids nie nies nient niais niait niaient nichée nichées nicher nichet nichets nô nos noix noie noies noient noua nouas nom noms non nome nomes nomme nommes nomment notre nôtre nôtres nourrice nourrices nourrisse nourrisses nourrissent nous noue noues nouent |
︙ | ︙ |
Modified gc_lang/fr/modules-js/gce_suggestions.js from [50cd88bd49] to [152a95fd16].
︙ | ︙ | |||
39 40 41 42 43 44 45 | for (let sStem of _oSpellChecker.getLemma(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { // we get the tense let aTense = new Set(); for (let sMorph of _oSpellChecker.getMorph(sFlex)) { let m; | | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | for (let sStem of _oSpellChecker.getLemma(sFlex)) { let tTags = conj._getTags(sStem); if (tTags) { // we get the tense let aTense = new Set(); for (let sMorph of _oSpellChecker.getMorph(sFlex)) { let m; let zVerb = new RegExp (">"+sStem+"/.*?(:(?:Y|I[pqsf]|S[pq]|K|P|Q))", "g"); while ((m = zVerb.exec(sMorph)) !== null) { // stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer) if (m) { if (m[1] === ":Y" || m[1] == ":Q") { aTense.add(":Ip"); aTense.add(":Iq"); aTense.add(":Is"); } else if (m[1] === ":P") { aTense.add(":Ip"); } else { aTense.add(m[1]); |
︙ | ︙ |
Modified gc_lang/fr/modules/gce_suggestions.py from [6e6f6db1f6] to [4e59fa697e].
︙ | ︙ | |||
26 27 28 29 30 31 32 | aSugg = set() for sStem in _oSpellChecker.getLemma(sFlex): tTags = conj._getTags(sStem) if tTags: # we get the tense aTense = set() for sMorph in _oSpellChecker.getMorph(sFlex): | | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | aSugg = set() for sStem in _oSpellChecker.getLemma(sFlex): tTags = conj._getTags(sStem) if tTags: # we get the tense aTense = set() for sMorph in _oSpellChecker.getMorph(sFlex): for m in re.finditer(">"+sStem+"/.*?(:(?:Y|I[pqsf]|S[pq]|K|P|Q))", sMorph): # stem must be used in regex to prevent confusion between different verbs (e.g. sauras has 2 stems: savoir and saurer) if m: if m.group(1) == ":Y" or m.group(1) == ":Q": aTense.add(":Ip") aTense.add(":Iq") aTense.add(":Is") elif m.group(1) == ":P": aTense.add(":Ip") else: aTense.add(m.group(1)) |
︙ | ︙ |
Modified gc_lang/fr/rules.grx from [99443fada4] to [68c3edb10f].
︙ | ︙ | |||
737 738 739 740 741 742 743 | !! !! !!!! Ponctuation de fin de paragraphe !! !! !! | | | 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 | !! !! !!!! Ponctuation de fin de paragraphe !! !! !! __[i>/poncfin(poncfin_règle1)__ ({w_1}) *$ @@0 <<- before("\\w+(?:\\.|[ ][!?]) +(?:[A-ZÉÈÎ]\\w+|[ÀÔ])") -1>> \1.|\1 !|\1 ? # Il semble manquer une ponctuation finale (s’il s’agit d’un titre, le point final n’est pas requis). TEST: __poncfin__ Vraiment. Quel {{ennui}} TEST: Internet : le nouvel eldorado TEST: OMC-FMI : Les nouveaux maîtres du monde |
︙ | ︙ | |||
764 765 766 767 768 769 770 | # Si « car » est la conjonction de coordination, une virgule est peut-être souhaitable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3447 __[i>/virg(virgule_manquante_avant_mais)__ ({w_1})( mais)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on)\b) @@0,$ <<- not morph(\1, ">(?:[mtscl]es|[nv]os|quels)/") -2>> , mais # Si « mais » est la conjonction de coordination, une virgule est souhaitable si elle introduit une nouvelle proposition.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3445 __[i>/virg(virgule_manquante_avant_donc)__ ({w_1})( donc)(?= (?:j[e’]|tu|ils?|elles?|on)\b) @@0,$ | | > | 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 | # Si « car » est la conjonction de coordination, une virgule est peut-être souhaitable.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3447 __[i>/virg(virgule_manquante_avant_mais)__ ({w_1})( mais)(?= (?:j[e’]|tu|ils?|nous|vous|elles?|on)\b) @@0,$ <<- not morph(\1, ">(?:[mtscl]es|[nv]os|quels)/") -2>> , mais # Si « mais » est la conjonction de coordination, une virgule est souhaitable si elle introduit une nouvelle proposition.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3445 __[i>/virg(virgule_manquante_avant_donc)__ ({w_1})( donc)(?= (?:j[e’]|tu|ils?|elles?|on)\b) @@0,$ <<- not morph(\1, ":[VG]") -2>> , donc # Si « donc » est la conjonction de coordination, une virgule est souhaitable si elle introduit une nouvelle proposition.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=3448 TEST: Un chien, un chat{{ etc.}} ->> , etc. TEST: Je suis fatigué{{ car}} ils ont joué toute la nuit. ->> , car TEST: Je suis fatigué{{ mais}} il a joué toute la nuit. ->> , mais TEST: il l’a vu de ses propres yeux{{ donc}} il faut y croire. ->> , donc TEST: il s’est donc tu TEST: Chacun peut l’entendre d’une manière différente et donc on se demande bien ce qui est mesuré dans les réponses. __<s>/virg(virgule_point_fin_dialogue)__ ([.] » )[a-zéà] @@0 <<- -1>> " », | » " # Ou il faut une virgule (exemple : « Je viens », dit-il). Ou le point est superflu. Ou il faut une majuscule sur le mot suivant. __<s>/virg(virgule_fin_dialogue)__ (, »,? )[a-zéà] @@0 <<- -1>> " », | » " # Virgule mal placée ou superflue. |
︙ | ︙ | |||
1837 1838 1839 1840 1841 1842 1843 | l’ [un|une] *WORD <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]") [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune] *WORD <<- =>> exclude(\2, ":V") [un|une] *WORD | | | > > > > > > | 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 | l’ [un|une] *WORD <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]") [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune] *WORD <<- =>> exclude(\2, ":V") [un|une] *WORD <<- not value(<1, "|l’|") and not value(\2, "|a|fut|fût|") and not morph(\2, ":P") =>> exclude(\2, ":V") [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne <<- =>> select(\-1, ":N") de [la|l’] @:¬:Y <<- =>> exclude(\3, ":V") [/VCint|/VCimp] [le|la|l’|leur|les] <<- =>> select(\2, ":D") de [>telle|ce|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|notre|votre|plein|pleine] *WORD <<- =>> exclude(\3, ":V") en tant que *WORD <<- =>> exclude(\4, ":[123][sp]") en peine <<- =>> exclude(\2, ":V") par *WORD <<- =>> exclude(\2, ":[123][sp]") plein [de|d’] @:[AN] <<- not morph(<1, ":V0e") =>> =define(\1, [":G"]) tout feu ?,¿ tout >flamme <<- ~>> ␣ <<- =>> define(\1, [":A:e:i"]) très *WORD <<- =>> exclude(\2, ":[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: en tant que président du conseil TEST: les bac +2 sont trop nombreux. TEST: c’est à n’y plus rien comprendre. TEST: Elle était tout feu, tout flamme. TEST: Ses rencards finissent par devenir lassants !!! !!! !!! Étiquettes !! !!! |
︙ | ︙ | |||
2015 2016 2017 2018 2019 2020 2021 | TEST: {{attaquant-ils}} ->> attaquent-ils TEST: {{prendrons-elles}} un verre avec moi ? __inte_verbes_composés_interrogatifs_impératifs__ ~\w-[nN]ous$ <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", None, True) # Forme interrogative ou impérative incorrecte. | | > | 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 | TEST: {{attaquant-ils}} ->> attaquent-ils TEST: {{prendrons-elles}} un verre avec moi ? __inte_verbes_composés_interrogatifs_impératifs__ ~\w-[nN]ous$ <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", None, True) # Forme interrogative ou impérative incorrecte. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:chez|malgré)/") ->> =suggSimil(\1, ":1p", False, True) # Forme interrogative ou impérative incorrecte. <<- />> -nous|VCint ~\w-[vV]ous$ <<- /inte/ morphVC(\1, ":V", ":2p") ->> =suggVerb(\1, ":2p", None, True) # Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel. <<- /inte/ __else__ and morphVC(\1, ":", ":V|>chez/") ->> =suggSimil(\1, ":2p", False, True) # Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel. <<- />> -vous|VCint TEST: {{Prendront-nous}} ->> Prendrons-nous TEST: {{Attendront-nous}} le train ->> Attendrons-nous TEST: {{Attaquait-vous}} ->> Attaquiez-vous TEST: Elle a de nombreux rendez-vous ce matin. TEST: êtes-vous là ? TEST: C’est notre chez-nous. TEST: Dans votre chez-vous, faites comme bon vous semble. TEST: Libérée en grande majorité durant l’automne 1945, une partie des « Malgré-nous » passe pourtant plusieurs années supplémentaires en captivité. __inte_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 |
︙ | ︙ | |||
2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 | notre père <<- morph(<1, ":D.*:[mp]") ~>> ␣ <<- __also__ =>> define(\1, [":N:m:i"]) __immunités__ à l’ arrache <<- %3>> à ce point en tout point <<- %3>> | > > > > | 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 | 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>> |
︙ | ︙ | |||
3207 3208 3209 3210 3211 3212 3213 | TEST: des {{franco américains}} TEST: {{franco américaine}} ->> franco-américaine TEST: l’{{israélo belge}} __tu_préfixe_xxxo__ | | > > > > | 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 | TEST: des {{franco américains}} TEST: {{franco américaine}} ->> franco-américaine TEST: l’{{israélo belge}} __tu_préfixe_xxxo__ [macro|magnéto|micro|paléo|rétro|rhino|stéréo] *WORD <<- /tu/ analyse_with_next(\1, "-", ":") ->> \1-\2 # S’il s’agit d’un seul mot, il manque un trait d’union. [électro|ferro|hydro|labio|médico|nano|néo|neuro|physico|politico|sino|socio] *WORD <<- /tu/ space_after(\1, 1, 1) and (morph(\2, ":N") or analyse_with_next(\1, "-", ":")) ->> \1-\2 # S’il s’agit d’un seul mot, il manque un trait d’union. TEST: {{ferro électrique}} ->> ferro-électrique TEST: {{rétro ingénierie}}. ->> rétro-ingénierie __tu_préfixe_divers__ [anti|auto|arrière|avant|demi|extra|intra|multi|post] *WORD <<- /tu/ (morph(<1, ":D|<start>") or value(<1, "|l’|d’|")) and analyse_with_next(\1, "-", ":") |
︙ | ︙ | |||
3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 | quelques [un|uns|une|unes] <<- /tu/ ->> quelques-\2 # Il manque un trait d’union. [plus|moins] [value|values] <<- /tu/ ->> \1-\2 # Il manque un trait d’union. rez de >chaussée <<- /tu/ ->> rez-de-chaussée # Il manque un trait d’union. science fiction <<- /tu/ ->> science-fiction # Il manque un trait d’union. stock >option | > > > > > > > | 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 | quelques [un|uns|une|unes] <<- /tu/ ->> quelques-\2 # Il manque un trait d’union. [plus|moins] [value|values] <<- /tu/ ->> \1-\2 # Il manque un trait d’union. ras le bol <<- /tu/ morph(<1, ":D") ->> ras-le-bol # Il manque des traits d’union. ras-le bol ras le-bol <<- /tu/ ->> ras-le-bol # Il manque un trait d’union. rez de >chaussée <<- /tu/ ->> rez-de-chaussée # Il manque un trait d’union. science fiction <<- /tu/ ->> science-fiction # Il manque un trait d’union. stock >option |
︙ | ︙ | |||
3900 3901 3902 3903 3904 3905 3906 | <<- /conf/ not \1.isupper() and not \2.isupper() -2>> =suggSimil(\2, ":[NA].*:[pi]", True) # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. [quels|quelles] [ces|des|les|mes|ses|tes|nos|vos|ce|cet|cette|ma|ta|sa|mon|je|tu|il|ils|elle|elles|nous|vous|on] <<- /conf/ not \1.isupper() and not \2.isupper() and not value(<1, "|tels|telles|") -2>> =suggSimil(\2, ":[NA].*:[pi]", True) # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. | | | | 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 | <<- /conf/ not \1.isupper() and not \2.isupper() -2>> =suggSimil(\2, ":[NA].*:[pi]", True) # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. [quels|quelles] [ces|des|les|mes|ses|tes|nos|vos|ce|cet|cette|ma|ta|sa|mon|je|tu|il|ils|elle|elles|nous|vous|on] <<- /conf/ not \1.isupper() and not \2.isupper() and not value(<1, "|tels|telles|") -2>> =suggSimil(\2, ":[NA].*:[pi]", True) # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. des [ces|des|les|mes|ses|tes|nos|vos|ce|cet|cette|ma|ta|sa|mon|je|tu|il|ils|elle|elles|nous|vous|on|ceux|celles|celui|celle] <<- /conf/ not \1.isupper() and not \2.isupper() -2>> =suggSimil(\2, ":[NA].*:[pi]", True) # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. <<- /conf/ __also__ -1>> de # Incohérence : les mots “\1” et “\2” ne devraient pas se succéder. TEST: {{Ces}} {{cette}} canaille qui nous a donné tant de fil à retordre. TEST: Mon {{il}} est une merveille. TEST: je ne sais {{des}} {{ses}} choses. |
︙ | ︙ | |||
4600 4601 4602 4603 4604 4605 4606 | on [ne|n’] [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [lui|leur] en @:¬:(?:V|Ov) <<- /conf/ not morph(<1, ":3s") and not value(<1, "|n’|m’|t’|s’|") --1>> =suggSimil(\-1, ":(?:3s|Ov)", False) # Incohérence avec “\1” : “\-1” devrait être un verbe, un pronom objet, un adverbe de négation, etc. | | | | | | | | | 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 | on [ne|n’] [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:¬:(?:V|Ov) on ?[ne|n’]¿ [lui|leur] en @:¬:(?:V|Ov) <<- /conf/ not morph(<1, ":3s") and not value(<1, "|n’|m’|t’|s’|") --1>> =suggSimil(\-1, ":(?:3s|Ov)", False) # Incohérence avec “\1” : “\-1” devrait être un verbe, un pronom objet, un adverbe de négation, etc. TEST: on {{et}} parti. TEST: on nous {{et}} indispensable. TEST: on ne {{travail}} pas le week-end. TEST: on m’{{arête}} encore une fois avec une impudence insupportable. TEST: on n’y {{pas}} beaucoup d’entente entre eux. TEST: on est normal de ne presque pas payer des gens qui effectuent un travail TEST: on s’en va. __conj_ce__ [ce|c’] @>(?:devoir|devenir|pouvoir|vouloir|savoir)/:V¬:(?:N|A|3s|P|Q|Ov) [ce|c’] [ne|n’] @>(?:devoir|devenir|pouvoir|vouloir|savoir)/:V¬:(?:3s|P|Ov) <<- /conj/ --1>> =suggVerb(\-1, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. |
︙ | ︙ | |||
4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 | TEST: elle {{c’}}en était trop vanté TEST: cet homme, perdu dans ses pensées, allait {{c’}}en faire du souci. TEST: il {{c’}}accoutumait à sa nouvelle fonction. TEST: elle {{c’}}anime dès qu’on fait du bruit. TEST: {{s’}}{{avait}} fonctionné TEST: c’était merveilleux. __conj_mieux_vaut__ mieux ?[ne|n’]¿ [vaux|valais|valus|vaudras|vaudrais] <<- /conj/ --1>> =\-1[:-1]+"t" # Conjugaison erronée. Accord avec “mieux” : utilisez la 3ᵉ personne du singulier. TEST: avec toi qui ne sais rien de rien, mieux {{vaux}} ne rien dire. TEST: Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire. ## 1pl __conj_nous__ <start> nous @:V¬:(?:G|Y|P|1p|3[sp]) <<- /conj/ not value(>1, "|je|tu|il|elle|on|nous|vous|ils|elles|") -3>> =suggVerb(\3, ":1p") # Conjugaison erronée. Accord avec “nous”. Le verbe devrait être à la 1ʳᵉ personne du pluriel. | > > > > > > > > > > > > > > | 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 | TEST: elle {{c’}}en était trop vanté TEST: cet homme, perdu dans ses pensées, allait {{c’}}en faire du souci. TEST: il {{c’}}accoutumait à sa nouvelle fonction. TEST: elle {{c’}}anime dès qu’on fait du bruit. TEST: {{s’}}{{avait}} fonctionné TEST: c’était merveilleux. __conf_ce_qui_verbe__ ce qui ?[lui|leur|leurs|nous|vous]¿ (et) ?@:[WX]¿ ?@:[WX]¿ @:(?:[AQD]|V1.*:Y) <<- -1>> est # Confusion probable : “et” est une conjonction de coordination. Pour le verbe “être”, écrivez “est”. ce qui ?[lui|leur|leurs|nous|vous]¿ (étai) ?@:[WX]¿ ?@:[WX]¿ @:(?:[AQD]|V1.*:Y) <<- -1>> était # Confusion probable : “étai” est un nom commun. Pour le verbe “être”, écrivez “était”. TEST: ce qui {{et}} beau. TEST: ce qui {{étai}} notre lot. TEST: ce qui lui {{étai}} propre TEST: ce qui nous {{et}} pas vraiment utile __conj_mieux_vaut__ mieux ?[ne|n’]¿ [vaux|valais|valus|vaudras|vaudrais] <<- /conj/ --1>> =\-1[:-1]+"t" # Conjugaison erronée. Accord avec “mieux” : utilisez la 3ᵉ personne du singulier. TEST: avec toi qui ne sais rien de rien, mieux {{vaux}} ne rien dire. TEST: Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire. ## 1pl __conj_nous__ <start> nous @:V¬:(?:G|Y|P|1p|3[sp]) <<- /conj/ not value(>1, "|je|tu|il|elle|on|nous|vous|ils|elles|") -3>> =suggVerb(\3, ":1p") # Conjugaison erronée. Accord avec “nous”. Le verbe devrait être à la 1ʳᵉ personne du pluriel. |
︙ | ︙ | |||
4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 | TEST: Comme on lui disait que vous-même aviez déjà consulté le notaire TEST: ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher TEST: mes supérieurs et moi-même avons pris la décision de ne pas vendre TEST: Ni lui ni moi n’avions mangé TEST: Mon épouse et moi-même avons toujours dit TEST: que vous ou moi ignorions à peu près tout du boson de Higgs n’a pas du tout le même sens !! !! !!!! Confusions générales !! !! !! | > > > > > > > > > > > > > > > > > | 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 | TEST: Comme on lui disait que vous-même aviez déjà consulté le notaire TEST: ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher TEST: mes supérieurs et moi-même avons pris la décision de ne pas vendre TEST: Ni lui ni moi n’avions mangé TEST: Mon épouse et moi-même avons toujours dit TEST: que vous ou moi ignorions à peu près tout du boson de Higgs n’a pas du tout le même sens # Confusion futur / conditionnel __vmode_je_futur__ <start> ([demain|oui|non]) ?,¿ [je|j’] ?[ne|n’]¿ ?y¿ (*WORD) ?@:[WX]¿ ?@:[WX]¿ <end> <start> ([demain|oui|non]) ?,¿ [je|j’] ?[ne|n’]¿ ?y¿ (*WORD) ?@:[WX]¿ ?@:[WX]¿ || [le|la|l’|les|un|une|des|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leur|leurs|quelques|plusieurs|certains|certaines] *WORD <end> <<- /vmode/ morph(\2, ":K:1s", ">(?:aimer|vouloir)/") -2>> =\2[:-1] # Confusion possible. Le mot “\1” semble indiquer une certitude. Dans ce cas, “\2” devrait être conjugué au futur, non au conditionnel. TEST: demain, je {{viendrais}} ->> viendrai TEST: non, je n’{{irais}} pas là-bas ! ->> irai TEST: oui, j’y {{penserais}}… ->> penserai TEST: oui, je le voudrais. TEST: oui, je l’aimerais. TEST: oui, je la prendrais pour femme si ça ne tenait qu’à moi. !! !! !!!! Confusions générales !! !! !! |
︙ | ︙ | |||
5211 5212 5213 5214 5215 5216 5217 | TEST: elle n’{{en n’}}avait plus pour longtemps. ->> "en " TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe #### Divers __ppas_lui_verbe__ lui ~é(?:es?|s)$ | | | > | 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 | TEST: elle n’{{en n’}}avait plus pour longtemps. ->> "en " TEST: toute chose pourrait finalement advenir indifféremment en n’importe quel point du globe #### Divers __ppas_lui_verbe__ lui ~é(?:es?|s)$ <<- /ppas/ morph(\2, ":Q") and not morph(<1, ":(?:V0a|R)") -2>> =suggVerbInfi(\2)+"|"+suggVerbPpas(\2, ":m:s") # Incohérence probable. Soit il faut un participe passé masculin singulier, soit un verbe à l’infinitif. lui aussi ~é(?:es?|s)$ <<- /ppas/ morph(\2, ":Q") and not morph(<1, ":(?:V0a|R)") -2>> =suggVerbPpas(\2, ":m:s") # Incohérence probable. Il faut vraisemblement un participe passé masculin singulier. TEST: lui {{mangée}} beaucoup. TEST: L’homme qui s’approchait de lui voulait le surprendre. TEST: avec Paul, lui aussi éliminé. TEST: les études qu’il a lui terminées avec bien du mal. TEST: cette déclaration fut selon lui rédigée par des imbéciles. __conf_presque_vconj__ presque @:[123][sp]¬:[GNAQWM] <<- /conf/ not tag_before(\1, "ce_que") and not value(<1, "|ou|") -2>> _ # Incohérence probable avec “presque” : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe. TEST: presque {{délaissait}} par tout le monde. |
︙ | ︙ | |||
5343 5344 5345 5346 5347 5348 5349 | à été <<- /conf/ -1>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. qui à @:Q¬:M <<- /conf/ \3.islower() -2>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. | | > > | 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 | à été <<- /conf/ -1>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. qui à @:Q¬:M <<- /conf/ \3.islower() -2>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. qui [lui|nous|vous|y] à <<- /conf/ -3>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. [leur|leurs] à <<- /conf/ not morph(<1, ":D") --1>> a # Confusion : “à” est une préposition. Pour le verbe avoir, écrivez “a”. à le @:[NAQ].*:[me]¬:(?:Y|Oo) <<- /conf/ -1:2>> a le|au # Confusion. Ou vous confondez “à” (préposition) avec “a” (avoir), ou vous devez employer “au”. Exemple : _à_ midi, il _a_ pris son déjeuner _au_ restaurant. à le @:[NAQ].*:f¬:(?:Y|Oo) <<- /conf/ -1:2>> à la|a la |
︙ | ︙ | |||
5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 | TEST: Ce chien, croyons-nous savoir, {{à le}} maître le plus violent qui soit. TEST: L’homme {{à}} ouvert la boîte. TEST: Il ne nous reste plus qu’{{à}} {{vérifié}} si votre maquette. TEST: Je veux {{à}} {{mangé}}. TEST: Ne pas hésiter {{à}} {{demandé}} des conseils. TEST: cette femme, dans son délire, {{à}} {{jetez}} son argent à la poubelle. TEST: Ce que cet homme à {{devient}} aujourd’hui notre problème TEST: il en a. TEST: elle en a. TEST: celle qui à contrario nous a foutu dans la merde. TEST: ceux qui à Somewhere se sont si mal illustrés. TEST: en à peine vingt ans | > | 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 | TEST: Ce chien, croyons-nous savoir, {{à le}} maître le plus violent qui soit. TEST: L’homme {{à}} ouvert la boîte. TEST: Il ne nous reste plus qu’{{à}} {{vérifié}} si votre maquette. TEST: Je veux {{à}} {{mangé}}. TEST: Ne pas hésiter {{à}} {{demandé}} des conseils. TEST: cette femme, dans son délire, {{à}} {{jetez}} son argent à la poubelle. TEST: Ce que cet homme à {{devient}} aujourd’hui notre problème TEST: le peuple leur {{à}} donner tort TEST: il en a. TEST: elle en a. TEST: celle qui à contrario nous a foutu dans la merde. TEST: ceux qui à Somewhere se sont si mal illustrés. TEST: en à peine vingt ans |
︙ | ︙ | |||
5662 5663 5664 5665 5666 5667 5668 | a haut risque a hue et à dia a huis clos a intervalles [réguliers|irréguliers] a juste [raison|titre] a l’ heure actuelle a l’ heure qu’ il est | | | 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 | a haut risque a hue et à dia a huis clos a intervalles [réguliers|irréguliers] a juste [raison|titre] a l’ heure actuelle a l’ heure qu’ il est a l’ [accoutumée|amiable|arrache|avance|avenir|avenant|aveuglette|emporte-pièce|évidence|extérieur|improviste|intérieur|inverse] a l’ air libre a l’ exclusion de toute autre chose a l’ ordre du jour a l’ œil nu a l’ en croire a l’ unanimité a l’ un d’ entre eux |
︙ | ︙ | |||
5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 | __conf_à_substantifs__ >arc a >poulie >arme a >feu >bombe a [eau|fragmentation|retardement] [>canne|>cane] a [>pêche|>sucre] >caisse a >outil >chair a [pâté|>canon] >crayon a [lèvres|sourcils] >cuillère a [café|soupe] >fard a paupières [>fille|fils] a [papa|maman] >gaz a effet de serre >lime a >ongle >machine a [café|coudre|laver] | > | 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 | __conf_à_substantifs__ >arc a >poulie >arme a >feu >bombe a [eau|fragmentation|retardement] [>canne|>cane] a [>pêche|>sucre] >caisse a >outil >chair a [pâté|>canon] >couteau a cran d’ arrêt >crayon a [lèvres|sourcils] >cuillère a [café|soupe] >fard a paupières [>fille|fils] a [papa|maman] >gaz a effet de serre >lime a >ongle >machine a [café|coudre|laver] |
︙ | ︙ | |||
6057 6058 6059 6060 6061 6062 6063 | TEST: on va y arriver, {{au temps que faire se peu}}… TEST: autant que faire se peut, il faut éviter la confusion entre ces deux discours. # ça / çà / sa __conf_ça_çà_sa__ ça @:[NAQ].*:f¬:(?:G|P|[123][sp])|>seule?s?/ | | | 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 | TEST: on va y arriver, {{au temps que faire se peu}}… TEST: autant que faire se peut, il faut éviter la confusion entre ces deux discours. # ça / çà / sa __conf_ça_çà_sa__ ça @:[NAQ].*:f¬:(?:G|P|[123][sp])|>seule?s?/ <<- /conf/ not morph(<1, ">appeler/") -1>> sa # Confusion : “sa” (sa maison, sa passion) ≠ “ça” (ça vient, ça heurte). sa @:G¬>(?:tr(?:ès|op)|peu|bien|plus|moins|toute|presque)/|:[NAQ].*:f <<- /conf/ not (\2 == "ou" and value(>1, "|son|ses|")) -1>> ça # Confusion : “sa” (sa maison, sa passion) ≠ “ça” (ça vient, ça heurte). sa [n’|m’|t’|s’|j’|l’|d’|qu’|lorsqu’|puisqu’|quoiqu’] <<- /conf/ -1>> ça # Confusion : “sa” (sa maison, sa passion) ≠ “ça” (ça vient, ça heurte). |
︙ | ︙ | |||
6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 | TEST: et {{sa}} par deux fois TEST: Il trouva de la nourriture {{ça et là}}. ->> çà et là TEST: Elle parle comme {{ça}} mère. ->> sa TEST: C’est comme {{sa}}. TEST: {{sa}} l’ennuierait, ce fils de pute, de dire bonjour ? TEST: il faut s’y prendre comme {{sa}} TEST: on fait {{sa}} lorsqu’on a tout perdu TEST: avec sa presque belle-mère TEST: sa toute nouvelle application de synchronisation de fichiers TEST: communiquer avec sa ou son partenaire. # Campagne / compagne __conf_campagne_compagne__ | > | 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 | TEST: et {{sa}} par deux fois TEST: Il trouva de la nourriture {{ça et là}}. ->> çà et là TEST: Elle parle comme {{ça}} mère. ->> sa TEST: C’est comme {{sa}}. TEST: {{sa}} l’ennuierait, ce fils de pute, de dire bonjour ? TEST: il faut s’y prendre comme {{sa}} TEST: on fait {{sa}} lorsqu’on a tout perdu TEST: Eux, ils appellent ça routine. TEST: avec sa presque belle-mère TEST: sa toute nouvelle application de synchronisation de fichiers TEST: communiquer avec sa ou son partenaire. # Campagne / compagne __conf_campagne_compagne__ |
︙ | ︙ | |||
6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 | TEST: Ils sont pas si {{différends}} de nous. TEST: Cette fois, il parla avec un ton différent. TEST: J’en veux un différent. TEST: Il en veut des différents. TEST: dans ses différents ouvrages TEST: dans ses différents postes gouvernementaux # dû / du __ppas_dû_du__ du [à|a|au|aux] <<- /ppas/ \2.islower() -1>> dû # Confusion. Ce qui est dû. [mon|notre|votre] du | > > > > > > > > > > | 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 | TEST: Ils sont pas si {{différends}} de nous. TEST: Cette fois, il parla avec un ton différent. TEST: J’en veux un différent. TEST: Il en veut des différents. TEST: dans ses différents ouvrages TEST: dans ses différents postes gouvernementaux # dites / dîtes __conf_dites_dîtes__ *WORD dîtes @:A¬:G <<- /conf/ morph(\1, ":[NA].*:[fe]:[pi]", ":G") -2>> dites # Confusion probable : “dîtes” est une forme verbale de dire au subjonctif. Pour l’ajectif, écrivez “dites”. TEST: Des armes {{dîtes}} létales. ->> dites TEST: usage débridé des armes dites létales TEST: Vous dîtes “idiotes”, je dis “originales”. # dû / du __ppas_dû_du__ du [à|a|au|aux] <<- /ppas/ \2.islower() -1>> dû # Confusion. Ce qui est dû. [mon|notre|votre] du |
︙ | ︙ | |||
6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 | # en / an __être_en_xxxx__ [>être|>rester|>demeurer] an [contradiction|désaccord|accord] <<- /conf/ -2>> en # Confusion. Un an = une année. Pour la préposition, écrivez “en”. TEST: Je suis {{an}} désaccord avec lui. # en général __conf_en_général__ en générale <<- /conf/ ->> en général # Dans cette locution, “général” est toujours au masculin singulier.|https://fr.wiktionary.org/wiki/en_g%C3%A9n%C3%A9ral TEST: On n’en sait {{en générale}} pas assez. | > > > > > > > > > | 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 | # en / an __être_en_xxxx__ [>être|>rester|>demeurer] an [contradiction|désaccord|accord] <<- /conf/ -2>> en # Confusion. Un an = une année. Pour la préposition, écrivez “en”. TEST: Je suis {{an}} désaccord avec lui. # en dessous __conf_dessus_dessous__ en dessus en-dessus <<- ->> en dessous|au-dessus # Confusion.|https://fr.wiktionary.org/wiki/en_dessous TEST: Il est {{en dessus}} de tout. # en général __conf_en_général__ en générale <<- /conf/ ->> en général # Dans cette locution, “général” est toujours au masculin singulier.|https://fr.wiktionary.org/wiki/en_g%C3%A9n%C3%A9ral TEST: On n’en sait {{en générale}} pas assez. |
︙ | ︙ | |||
7245 7246 7247 7248 7249 7250 7251 | <<- /conf/ not morph(<1, ":[VR]|<start>") and not morph(>1, ":(?:3s|Ov)") -2>> ont # Confusion probable. Exemples : « on y va », « ils ont faim ». ~-ont$ <<- /conf/ ->> =\1[:-1] # Incohérence : “ont” est une forme conjuguée du verbe “avoir” (par exemple: “ils ont”). Pour le pronom personnel, écrivez “on”. [<start>|,] *WORD ont | | | 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 | <<- /conf/ not morph(<1, ":[VR]|<start>") and not morph(>1, ":(?:3s|Ov)") -2>> ont # Confusion probable. Exemples : « on y va », « ils ont faim ». ~-ont$ <<- /conf/ ->> =\1[:-1] # Incohérence : “ont” est une forme conjuguée du verbe “avoir” (par exemple: “ils ont”). Pour le pronom personnel, écrivez “on”. [<start>|,] *WORD ont <<- /conf/ space_after(\2, 1, 1) and not value(\2, "|soit|") and morph(\2, ":3s") -2:3>> \2-on # Confusion probable : “ont” est une forme conjuguée du verbe “avoir”. Pour le pronom personnel, écrivez “on” et mettez un trait d’union puisqu’il s’agit d’une question. TEST: {{ont}} m’assure qu’il n’y en a pas. TEST: {{Ont}} n’arrive pas à s’en sortir. TEST: {{Ont}} ne sait jamais quoi faire TEST: si {{ont}} donne à ces gens, ça n’en finit plus. TEST: {{Ont}} viens ! |
︙ | ︙ | |||
7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 | TEST: comme ce que l’{{ont}} {{voit}} dans le lien entre polygynie et guerre. TEST: Tout à fait, {{ont}} peut même dire qu’à l’adolescence, ce sont les problèmes de l’enfance qui ressortent. TEST: les politiques de l’offre ont échoué. TEST: qui on blâme, ce soir ? TEST: qui n’ont somme toute que le désir de vivre paisiblement TEST: ces textes, quoi qu’on en pense, ont force de loi. TEST: s’ils n’ont ne serait-ce qu’un peu de jugeotte, on ne les reverra plus. # ou / où __conf_où_ou__ <start> Ou @:3[sp]¬:Y <<- /conf/ -2>> Où # Confusion probable. La conjonction “ou” signale une alternative. Utilisez “où” pour “en quel lieu”. | > | 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 | TEST: comme ce que l’{{ont}} {{voit}} dans le lien entre polygynie et guerre. TEST: Tout à fait, {{ont}} peut même dire qu’à l’adolescence, ce sont les problèmes de l’enfance qui ressortent. TEST: les politiques de l’offre ont échoué. TEST: qui on blâme, ce soir ? TEST: qui n’ont somme toute que le désir de vivre paisiblement TEST: ces textes, quoi qu’on en pense, ont force de loi. TEST: s’ils n’ont ne serait-ce qu’un peu de jugeotte, on ne les reverra plus. TEST: En français, la plupart des noms de métier traditionnellement masculins soit ne disposent pas d’une forme féminine, soit ont des formes féminines anciennes tombées en désuétude. # ou / où __conf_où_ou__ <start> Ou @:3[sp]¬:Y <<- /conf/ -2>> Où # Confusion probable. La conjonction “ou” signale une alternative. Utilisez “où” pour “en quel lieu”. |
︙ | ︙ | |||
7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 | à la >seconde [>prêt|>pré] <<- /conf/ -3>> près # Confusion probable. Locution “à la \2 près”. au >mètre [>prêt|>pré] <<- /conf/ -3>> près # Confusion probable. Locution “au \2 près”. TEST: depuis {{prêt}} de 15 ans TEST: ils se sont approchés très {{prêts}}. TEST: Je suis si {{prêt}} d’y arriver. TEST: Elle est si {{prêt}} de la trouver. TEST: Il est {{près}} à les aider TEST: Elle va regarder ça de plus {{prêt}}. TEST: Il était rasé de {{prés}} TEST: Il a obtenu un prêt de Patrick TEST: Il a obtenu un prêt de Le Drian TEST: collait au millimètre près à la réalité # puits / puis __conf_puits_puis__ | > > > > > | 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 | à la >seconde [>prêt|>pré] <<- /conf/ -3>> près # Confusion probable. Locution “à la \2 près”. au >mètre [>prêt|>pré] <<- /conf/ -3>> près # Confusion probable. Locution “au \2 près”. à [ceci|cela] ([prêt|prêts]) [que|qu’] , à [ceci|cela] ([prêt|prêts]) , <<- /conf/ -1>> près # Confusion probable. Locution “à \2 près”.|https://fr.wiktionary.org/wiki/%C3%A0_cela_pr%C3%A8s TEST: depuis {{prêt}} de 15 ans TEST: ils se sont approchés très {{prêts}}. TEST: Je suis si {{prêt}} d’y arriver. TEST: Elle est si {{prêt}} de la trouver. TEST: Il est {{près}} à les aider TEST: Elle va regarder ça de plus {{prêt}}. TEST: Il était rasé de {{prés}} TEST: Il est un peu fantasque ; mais, à cela {{prêt}}, c’est un aimable homme. TEST: Il a obtenu un prêt de Patrick TEST: Il a obtenu un prêt de Le Drian TEST: collait au millimètre près à la réalité # puits / puis __conf_puits_puis__ |
︙ | ︙ | |||
8231 8232 8233 8234 8235 8236 8237 | TEST: un immonde {{vert}} de terre TEST: Un {{ver}} de bière fraîche. TEST: ce {{vert}} quoi nous allons, c’est une catastrophe à l’échelle planétaire. # voix / voie / vois / voit __conf_voie_voix_vois_voit__ | | | > | | | | 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 | TEST: un immonde {{vert}} de terre TEST: Un {{ver}} de bière fraîche. TEST: ce {{vert}} quoi nous allons, c’est une catastrophe à l’échelle planétaire. # voix / voie / vois / voit __conf_voie_voix_vois_voit__ à haute [>voie|vois|voit] de vive [>voie|vois|voit] à portée de [>voie|vois|voit] <<- /conf/ --1>> voix # Confusion. Pour évoquer un son humain, animal ou instrumental, écrivez “voix”.|http://fr.wiktionary.org/wiki/voix à [>voie|vois|voit] [basse|haute|basses|hautes] <<- /conf/ -2>> voix # Confusion. Pour évoquer un son humain, animal ou instrumental, écrivez “voix”.|http://fr.wiktionary.org/wiki/voix sur la bonne voix <<- /conf/ -4>> voie # Confusion. La voix est un son humain, animal ou instrumental. Pour évoquer un chemin, écrivez “voie”.|http://fr.wiktionary.org/wiki/voie >ouvrir la voix [à|au|aux] <<- /conf/ -3>> voie # Confusion. La voix est un son humain, animal ou instrumental. Pour évoquer un chemin, écrivez “voie”.|http://fr.wiktionary.org/wiki/voie |
︙ | ︙ | |||
8270 8271 8272 8273 8274 8275 8276 | # voir / voire __conf_voir_voire__ voir [grand|petit|rouge] <<- %2>> voir @:A¬:[NGM] | | | 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 | # voir / voire __conf_voir_voire__ voir [grand|petit|rouge] <<- %2>> voir @:A¬:[NGM] <<- /conf/ not \2.istitle() and not morph(<1, ":O[os]|>(?:[ndmts]e|falloir|pouvoir|savoir|vouloir|préférer|faire|de|à)/") and not before("(?i)\\b[ndmts](?:e |’(?:en |y ))(?:pas |jamais |) *$") -1>> voire # Confusion probable : “voir” est un verbe concernant la perception visuelle. Pour signifier “et même possiblement”, écrivez “voire”.|https://fr.wiktionary.org/wiki/voire [comme|lorque|puisque|quand|que|quoique|si] (voire) [ni|et|par|pour|sans] (voire) [>aller|>falloir|>pouvoir|>vouloir] ?[guère|jamais|pas|plus|point|rien]¿ (voire) <<- /conf/ -1>> voir # Confusion probable : “voire” signifie “et même possiblement”. Pour le verbe, écrivez “voir”.|https://fr.wiktionary.org/wiki/voire |
︙ | ︙ | |||
8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 | TEST: l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous) TEST: elles sont pas mal ainsi, voire élégantes pourrait-on dire. 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. TEST: les membres de l’équipage commencent à voir flou TEST: un travail qu’il préfère voir effectué par un spécialiste plutôt que par lui-même # vieil / vieux __conf_vieil_vieux_euphonie__ vieux homme <<- /conf/ -1>> vieil # Euphonie. Utilisez “vieil” pour un nom masculin singulier commençant par une voyelle ou un h.|https://fr.wikipedia.org/wiki/Euphonie vieux ~^[aeéiîou] | > > | > > > > > > > > > | 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 | TEST: l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous) TEST: elles sont pas mal ainsi, voire élégantes pourrait-on dire. 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. TEST: les membres de l’équipage commencent à voir flou TEST: un travail qu’il préfère voir effectué par un spécialiste plutôt que par lui-même TEST: médicaments qui me donnent envie de vomir, qui m’abrutissent, qui me font voir flou # vieil / vieux __conf_vieil_vieux_euphonie__ vieux homme <<- /conf/ -1>> vieil # Euphonie. Utilisez “vieil” pour un nom masculin singulier commençant par une voyelle ou un h.|https://fr.wikipedia.org/wiki/Euphonie vieux ~^[aeéiîou] <<- /conf/ morph(\2, ":[NA].*:[me]:s", ":[123][sp]") -1>> vieil # Euphonie. Utilisez “vieil” pour un nom masculin singulier commençant par une voyelle ou un h.|https://fr.wikipedia.org/wiki/Euphonie TEST: ce {{vieux}} homme TEST: c’est un {{vieux}} imbécile. TEST: Le {{vieux}} homme était parti. ->> vieil TEST: Diviser les jeunes et les vieux est un peu son fonds de commerce # ayants droit __sgpl_ayants_droit__ [les|des|ces|ses|nos|vos|leurs] ayant [droit|droits] <<- /sgpl/ -2:3>> ayants droit # Au singulier : “un ayant droit”. Au pluriel : “des ayants droit”. TEST: Comment lutter contre la cupidité des {{ayant droits}} # Note: À supprimer? Graphie qui tend vers la soudure et le pluriel régulier (ayant-droit(s)) # bien __sgpl_très_bien__ très biens <<- /sgpl/ -2>> bien # Adverbe ou adjectif, “bien” est invariable.|https://fr.wiktionary.org/wiki/bien TEST: Très {{biens}} connus des services de police, il leur fut difficile de passer entre les mailles du filet. # termes __sgpl_en_termes_de__ en terme [de|d’] <<- /sgpl/ -2>> termes # Dans la locution “en termes de”, mettez “terme” au pluriel. TEST: en {{terme}} de communication, c’est une véritable catastrophe |
︙ | ︙ | |||
9263 9264 9265 9266 9267 9268 9269 | à plat ventre à plate couture à plein [régime|temps|nez] à pleins poumons à plus forte raison à plus d’un titre à point nommé | | | 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 | à plat ventre à plate couture à plein [régime|temps|nez] à pleins poumons à plus forte raison à plus d’un titre à point nommé à portée de [main|tir|voix] à première vue à prix [cassé|modique|cassés|modiques] à proprement parler à qui de droit à qui mieux mieux à qui que ce soit à quelque distance |
︙ | ︙ | |||
9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 | de près ou de loin de par le monde ?entier¿ de part et d’autre de ?presque¿ partout d’ un peu partout de petite taille de pied ferme de plein [droit|fouet] de plus [belle|près] de premier [choix|ordre|plan] de première [catégorie|main|nécessité] de prime abord de proche en proche de pure forme | > | 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 | de près ou de loin de par le monde ?entier¿ de part et d’autre de ?presque¿ partout d’ un peu partout de petite taille de pied ferme de place en place de plein [droit|fouet] de plus [belle|près] de premier [choix|ordre|plan] de première [catégorie|main|nécessité] de prime abord de proche en proche de pure forme |
︙ | ︙ | |||
9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 | niveau par niveau pièce par pièce par-ci ?,¿ par-là par-derrière par-dessus le marché par-dessus tout par-devant par là parfois partant de là partout pas du tout pas le moins du monde pas à pas | > | 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 | niveau par niveau pièce par pièce par-ci ?,¿ par-là par-derrière par-dessus le marché par-dessus tout par-devant par instants par là parfois partant de là partout pas du tout pas le moins du monde pas à pas |
︙ | ︙ | |||
10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 | pour autant [que|qu’] nous sachions @¬:Y pour autant [que|qu’] vous sachiez @¬:Y pour autant [que|qu’] [ils|elles] sachent @¬:Y <<- ~1:5>> * pour cette raison [que|qu’] <<- ~1:3>> * [le|un|ce|mon|ton|son] putain [de|d’] @:[NA].*:[me] <<- ~2:3>> * tambour battant tambours battants <<- morph(<1, ":(?:V|N:f)", ":G") ~>> * | > > > > | 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 | pour autant [que|qu’] nous sachions @¬:Y pour autant [que|qu’] vous sachiez @¬:Y pour autant [que|qu’] [ils|elles] sachent @¬:Y <<- ~1:5>> * pour cette raison [que|qu’] <<- ~1:3>> * pour les uns @:¬:[AQ].*:[me]:[pi] pour les autres @:¬:[AQ].*:[pi] <<- ~1:3>> * [le|un|ce|mon|ton|son] putain [de|d’] @:[NA].*:[me] <<- ~2:3>> * tambour battant tambours battants <<- morph(<1, ":(?:V|N:f)", ":G") ~>> * |
︙ | ︙ | |||
10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 | >arme de [poing|guerre] >arme de destruction massive >argent de poche >article de presse >attestation sur l’ honneur >attendre de pied ferme ayants droit >billet de *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling] [>bisphénol|>bisphenol] A >blanche comme neige >blanche comme de la craie [>boîte|>boite] aux lettres [>boîte|>boite] à gants >bombe à [eau|fragmentation|retardement] >brosse à >dent >canne à [pêche|sucre] >caisse à >outil >chair à [pâté|>canon] >chambre [de|d’] [agriculture|hôte|hôtes|commerce|compensation|décompression|dégrisement] >chasse à courre >chemin de [traverse|fer] >chili con carne >claire comme de l’ eau de [boudin|roche|source] >claire comme du cristal >claire comme jus de [boudin|chaussette|chaussettes|chique] >commise d’ office >convention [récepteur|générateur] >conne comme la lune >conne comme un balai >conne comme une valise sans >poignée >coup [de|d’] [balai|bol|cœur|couteau|foudre|fil|grâce|jarnac|théâtre|coude|genou|main|patte|pied|poing|poker|pouce|tête|avance|éclat|État|œil|épaule] >coup du sort >course contre la montre [cousu|cousue|cousus|cousues] [main] [cousu|cousue|cousus|cousues] de fil blanc >crayon à [lèvres|sourcils] [>coût|>cout] de revient >cuillère à [café|soupe] >déclaration sur l’ honneur >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur] >demande d’ asile >descente aux [enfers|flambeaux] [>dîner|>diner] aux chandelles >digne de [confiance|foi] | > > > > > | 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 | >arme de [poing|guerre] >arme de destruction massive >argent de poche >article de presse >attestation sur l’ honneur >attendre de pied ferme ayants droit bas résille >benne à >ordure >billet de *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling] [>bisphénol|>bisphenol] A >blanche comme neige >blanche comme de la craie [>boîte|>boite] aux lettres [>boîte|>boite] à gants >bombe à [eau|fragmentation|retardement] >brosse à >dent >canne à [pêche|sucre] >caisse à >outil >chair à [pâté|>canon] >chambre [de|d’] [agriculture|hôte|hôtes|commerce|compensation|décompression|dégrisement] >chasse à courre >chemin de [traverse|fer] >chili con carne >claire comme de l’ eau de [boudin|roche|source] >claire comme du cristal >claire comme jus de [boudin|chaussette|chaussettes|chique] [>clé|>clef] à molette >commise d’ office >condamnée à mort >convention [récepteur|générateur] >conne comme la lune >conne comme un balai >conne comme une valise sans >poignée >coup [de|d’] [balai|bol|cœur|couteau|foudre|fil|grâce|jarnac|théâtre|coude|genou|main|patte|pied|poing|poker|pouce|tête|avance|éclat|État|œil|épaule] >coup du sort >course contre la montre [cousu|cousue|cousus|cousues] [main] [cousu|cousue|cousus|cousues] de fil blanc >crayon à [lèvres|sourcils] [>coût|>cout] de revient >couteau à cran d’ arrêt >cuillère à [café|soupe] >déclaration sur l’ honneur >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur] >demande d’ asile >descente aux [enfers|flambeaux] [>dîner|>diner] aux chandelles >digne de [confiance|foi] |
︙ | ︙ | |||
10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 | basse consommation bon [enfant|marché|teint] bon chic ?,¿ bon genre [>clé|>clef] en >main dernier cri fleur bleue grand [public|luxe|maximum] grandeur nature haut de gamme hautee [résolution|fidélité|tension] longue [distance|portée|durée] meilleur marché numéro un numéro @:B plein cadre top secret vieux jeu open source Créative Commons pair à pair plein les yeux pur [sucre|jus] terre à terre vieille école <<- morph(<1, ":(?:N|A|Q|W|V0e)", ":D") ~>> * __purge_couleurs__ | > > | | 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 | basse consommation bon [enfant|marché|teint] bon chic ?,¿ bon genre [>clé|>clef] en >main dernier cri fleur bleue grand [public|luxe|maximum] grande taille grandeur nature haut de gamme hautee [résolution|fidélité|tension] longue [distance|portée|durée] meilleur marché numéro un numéro @:B plein cadre top secret vieux jeu open source Créative Commons pair à pair petite taille plein les yeux pur [sucre|jus] terre à terre vieille école <<- morph(<1, ":(?:N|A|Q|W|V0e)", ":D") ~>> * __purge_couleurs__ [beige|blanc|bleu|brun|châtain|cyan|gris|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet] [brillant|clair|fluo|foncé|irisé|mat|pâle|pastel|sale|sombre|tendre|terne|vif] <<- morph(<1, ":[NAQ]") ~>> * bleu [ciel|indigo|marine|roi|saphir|turquoise] blond platine gris [acier|anthracite|perle|souris] jaune [paille|sable] noir [de|d’] [encre|jais] |
︙ | ︙ | |||
11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 | <<- ~1:4>> * en [certaines|quelques|plusieurs] occasions @¬:A.*:[fe]:[pi] <<- ~1:3>> * en de multiples occasions @¬:A.*:[fe]:[pi] <<- ~1:4>> * entre autres choses @¬:A.*:[fe]:[pi] <<- ~1:3>> * | > > > < | 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 | <<- ~1:4>> * en [certaines|quelques|plusieurs] occasions @¬:A.*:[fe]:[pi] <<- ~1:3>> * en de multiples occasions @¬:A.*:[fe]:[pi] <<- ~1:4>> * en un sens @¬:A.*:[me]:[si] <<- ~1:3>> * entre autres choses @¬:A.*:[fe]:[pi] <<- ~1:3>> * [quelques|plusieurs] [secondes|minutes|heures|journées|semaines|années|décennies] @¬:A.*:[fe]:[pi] <<- ~1:2>> * de [quelques|plusieurs] [secondes|minutes|heures|journées|semaines|années|décennies] @¬:A.*:[fe]:[pi] <<- ~1:3>> * |
︙ | ︙ | |||
11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 | >aller bon train >arriver à échéance >arriver à point nommé >arriver à bon port >battre en [brèche|retraite] >chauffer à blanc >compter à rebours >couler à ?grands¿ flots >demander [assistance|audience|conseil|pardon] [>donner|>redonner] sens | > | | 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 | >aller bon train >arriver à échéance >arriver à point nommé >arriver à bon port >battre en [brèche|retraite] >chauffer à blanc >compter à rebours >condamner à mort >couler à ?grands¿ flots >demander [assistance|audience|conseil|pardon] [>donner|>redonner] sens >faire [allusion|assaut|attention|chaud|confiance|compliqué|copain-copain|débat|défaut|demi-tour|envie|erreur|figure|froid|halte|honte|illusion|mouche|office|part|peur|polémique|plaisir|preuve|rage|scandale|sens|signe|volte-face] >faire amende honorable >faire bande à part >faire bonne figure >faire chou blanc >faire copain copain >faire de [mon|ton|son|notre|votre|leur] mieux >faire état |
︙ | ︙ | |||
11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 | >faire grise mine >faire grand [bruit|cas] >faire profil bas >faire salle comble >faire table rase >faire ce que bon [me|te|lui|nous|vous|leur] semble >foutre en l’ air >jouer franc jeu >lâcher prise >laisser pour compte >marcher à rebours | > | | | | > | 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 | >faire grise mine >faire grand [bruit|cas] >faire profil bas >faire salle comble >faire table rase >faire ce que bon [me|te|lui|nous|vous|leur] semble >foutre en l’ air [>gonfler|>regonfler] à bloc >jouer franc jeu >lâcher prise >laisser pour compte >marcher à rebours [>mettre|>remettre] à [bas|flot|jour|niveau|nu|plat|terre] [>mettre|>remettre] l’ [écart|épreuve] [>mettre|>remettre] au [point|pas] [>mettre|>remettre] en [avant|bouche|demeure|garde|jeu|lumière|œuvre|place|scène|terre] >mourir jeune [>naître|>naitre] sous x >percer à jour >perdre [connaissance|conscience|raison] >perdre d’ avance >porter [atteinte|bonheur|caution|chance|malheur|plainte|préjudice|secours] >poser problème >prendre ?[ça|cela|ceci]¿ à la légère >prendre ?[ça|cela|ceci]¿ au [dépourvu|sérieux] |
︙ | ︙ | |||
11337 11338 11339 11340 11341 11342 11343 | >tenir ?[ça|cela|ceci]¿ à distance ?respectable¿ >tenir compte >tenir au courant >trier sur le volet >trouver refuge >tirer [avantage|profit] >tourner court | | | | | | | | 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 | >tenir ?[ça|cela|ceci]¿ à distance ?respectable¿ >tenir compte >tenir au courant >trier sur le volet >trouver refuge >tirer [avantage|profit] >tourner court [>venir|>revenir] je ne sais ?pas¿ ?trop¿ d’ où [>venir|>revenir] on ne sait ?pas¿ ?trop¿ d’ où <<- ~2:0>> * __conf_locutions_verbales__ >arriver a échéance >arriver a point nommé >arriver a bon port >chauffer a blanc [>gonfler|>regonfler] a bloc [>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>nue|>plat|>terre] [>mettre|>remettre] a l’ [écart|épreuve] >percer a jour >prendre a la légère >saigner a blanc >tenir a distance [>venir|>revenir] a point <<- /conf/ -2>> à # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”. >faire plaisirs <<- /sgpl/ -2>> plaisir # Faire plaisir : dans cette locution, “plaisir” doit être au singulier. <<- ~2>> * >laisser pour [comte|comtes|>conte] |
︙ | ︙ | |||
11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 | TEST: Elles ont avec constance démontré l’inanité de leur politique. TEST: On l’a mauvaise, j’peux vous l’dire. TEST: Défigurée, travestie, dans tous les cas contestée. TEST: Une file d’attente de plusieurs heures s’étire au rez-de-chaussée TEST: à une hausse des coûts de l’emprunt à court et moyen terme. TEST: Elle n’avait que rarement pris connaissance de ses droits. TEST: On ajoutera que si elle n’a que rarement pris la connerie pour objet @@@@ @@@@ @@@@ @@@@ | > > > > | 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 | TEST: Elles ont avec constance démontré l’inanité de leur politique. TEST: On l’a mauvaise, j’peux vous l’dire. TEST: Défigurée, travestie, dans tous les cas contestée. TEST: Une file d’attente de plusieurs heures s’étire au rez-de-chaussée TEST: à une hausse des coûts de l’emprunt à court et moyen terme. TEST: Elle n’avait que rarement pris connaissance de ses droits. TEST: On ajoutera que si elle n’a que rarement pris la connerie pour objet TEST: Les bas résille, le détail qui fait mouche. TEST: un vice pour les uns diabolique et pour les autres patriarcal TEST: Les gains sont en un sens maigres. TEST: Des vêtements grande taille @@@@ @@@@ @@@@ @@@@ |
︙ | ︙ | |||
11643 11644 11645 11646 11647 11648 11649 | <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin. <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3) -3>> =suggMasSing(\3) # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier. [et|ou] le *WORD *WORD <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not \4.startswith("seul") >>> | | > | 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 | <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3) -3>> =suggMasSing(\3, True) # Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin. <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3) -3>> =suggMasSing(\3) # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier. [et|ou] le *WORD *WORD <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not \4.startswith("seul") >>> <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4) -4>> =suggMasSing(\4, True) # Accord de genre erroné : « \2 \3 » est masculin, « \4 » est féminin. <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\4, \4) -4>> =suggMasSing(\4) # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier. TEST: le test très {{cons}} qu’on a passé hier. TEST: c’était le chien {{perdue}} des voisins. TEST: viens vite ou le pari {{imperdables}} sera moins facile… TEST: Le bruit {{perçus}} par les voisins. TEST: si le premier film est un triomphe, le deuxième est un demi-succès, et le troisième une déception. TEST: Cela aboutira sur une contractualisation coûteuse pour organiser cette divergence d’intérêts, et le gestionnaire aura le dernier mot. __gn_la_1m__ , la *WORD <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)") -2>> le # Accord de genre erroné : « \3 » est masculin. <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True) # Accord de genre erroné : « \2 » est un déterminant féminin. <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggFemSing(\3) # Accord de nombre erroné : « \3 » devrait être au singulier. |
︙ | ︙ | |||
11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 | __gn_aucun_1m__ aucun *WORD <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> aucune # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: aucun {{accords}} n’y changera rien. __gn_aucune_1m__ aucune *WORD <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> aucun # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: aucune {{passions}} n’est digne qu’on meurt pour elle. __gn_un_1m__ un *WORD <<- /gn/ morph(\2, ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. | > > > > > > > > > > > > > > > > > > > > > > > | 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 | __gn_aucun_1m__ aucun *WORD <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> aucune # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: aucun {{accords}} n’y changera rien. TEST: {{aucun}} femme ne réagirait si bêtement __gn_aucune_1m__ aucune *WORD <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> aucun # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: aucune {{passions}} n’est digne qu’on meurt pour elle. TEST: {{aucune}} homme ne comprendrait ça __gn_nul_1m__ nul *WORD <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> nulle # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: nul {{accords}} n’y changera rien. TEST: {{nul}} femme ne réagirait si bêtement __gn_nulle_1m__ nulle *WORD <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> nul # Accord de genre erroné : « \2 » est masculin. <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant féminin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. TEST: nulle {{passions}} n’est digne qu’on meurt pour elle. TEST: {{nulle}} homme ne comprendrait ça __gn_un_1m__ un *WORD <<- /gn/ morph(\2, ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une # Accord de genre erroné : « \2 » est féminin. <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True) # Accord de genre erroné : « \1 » est un déterminant masculin. <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2) # Accord de nombre erroné : « \2 » devrait être au singulier. |
︙ | ︙ | |||
11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 | TEST: un {{fromages}}. ->> fromage TEST: Un {{ballons}} ->> ballon TEST: Une {{cinglées}} ->> cinglée TEST: {{une}} des {{chats}} TEST: {{une}} kyste ->> un TEST: {{une}} des {{joueurs}} TEST: mille et une merveilles ## un / une __gn_un_2m__ un *WORD *WORD <<- /gn/ not value(<1, "|et|ou|d’|") and not \3.startswith("seul") >>> <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3) | > | 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 | TEST: un {{fromages}}. ->> fromage TEST: Un {{ballons}} ->> ballon TEST: Une {{cinglées}} ->> cinglée TEST: {{une}} des {{chats}} TEST: {{une}} kyste ->> un TEST: {{une}} des {{joueurs}} TEST: mille et une merveilles TEST: Quatorze heures découpées en quatre parties, une sortant en salles chaque semaine ## un / une __gn_un_2m__ un *WORD *WORD <<- /gn/ not value(<1, "|et|ou|d’|") and not \3.startswith("seul") >>> <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3) |
︙ | ︙ | |||
12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 | <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A")) -4>> =suggPlur(\4) # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel. TEST: les pitres {{imbécile}} TEST: il faut en convenir et les femmes {{oubliés}} seront satisfaites. TEST: et les femmes {{retrouvés}} seront emmenées à l’hôpital. TEST: les moins éloignées possible __gn_leurs_1m__ leurs *WORD <<- /gn/ (morph(\2, ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))) or \2 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. | > | 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 | <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A")) -4>> =suggPlur(\4) # Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel. TEST: les pitres {{imbécile}} TEST: il faut en convenir et les femmes {{oubliés}} seront satisfaites. TEST: et les femmes {{retrouvés}} seront emmenées à l’hôpital. TEST: les moins éloignées possible TEST: Les besoins minimums en matière de sommeil sont-ils les mêmes d’un individu à l’autre ? __gn_leurs_1m__ leurs *WORD <<- /gn/ (morph(\2, ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))) or \2 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. |
︙ | ︙ | |||
12493 12494 12495 12496 12497 12498 12499 | TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui. __gn_det_groupe_de_1m__ [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques] [>centaine|>millier|>million|>milliard|>dizaine|>douzaine|>multitude|>horde] [de|d’] *WORD <<- /gn/ morph(\4, ":[NA].*:s", ":[ip]|>fraude/") or \4 in aREGULARPLURAL | | | 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 | TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui. __gn_det_groupe_de_1m__ [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques] [>centaine|>millier|>million|>milliard|>dizaine|>douzaine|>multitude|>horde] [de|d’] *WORD <<- /gn/ morph(\4, ":[NA].*:s", ":[ip]|>fraude/") or \4 in aREGULARPLURAL -4>> =suggPlur(\4) # Avec \1 « \2 \3… », mettre au pluriel “\4” s’il y en a bien plusieurs. TEST: des centaines de {{bête}} à cornes passèrent devant nous. ->> bêtes TEST: une multitude d’{{homme}} ->> hommes TEST: les 80 milliards de fraude fiscale ## quelque adverbe |
︙ | ︙ | |||
12532 12533 12534 12535 12536 12537 12538 | or \2 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. mille *WORD <<- /gn/ (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|") -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. | | | | > > | | > > | 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 | or \2 in aREGULARPLURAL -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. mille *WORD <<- /gn/ (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|") -2>> =suggPlur(\2) # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel. TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS. ->> idiots TEST: Il a abandonné neuf {{enfant}}. ->> enfants TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts. ->> travailleurs TEST: Il y a quatre cents {{mot}} dans la phrase. ->> mots TEST: un logement neuf bâti par des professionnels. TEST: un mille marin. TEST: L’article VII mentionné dans la revue __gn_nombre_chiffres_1m__ [0|1|01] @:[NAQ].*:p¬* <<- /gn/ space_after(\1, 1, 1) and not value(\2, "|Rois|Corinthiens|Thessaloniciens|") -2>> =suggSing(\2) # Accord de nombre erroné : « \1 » devrait être au singulier. *NUM *WORD <<- /gn/ space_after(\1, 1, 1) and not value(<1, "|/|") and not re.search("^0*[01](?:,[0-9]+|)$", \1) and not morph(<1, ":N") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|")) or \1 in aREGULARPLURAL ) -2>> =suggPlur(\2) # Accord de nombre erroné : « \2 » devrait être au pluriel. TEST: 00 heure, 01 heure TEST: il a adopté 1 {{chiens}}. TEST: 22 {{heure}} TEST: 3 {{heure}} TEST: les élèves sont inquiets après une année 2018 compliquée et riche en réformes. TEST: ils gagneront 300 € maximum. TEST: il revint en 2005 complètement dévoré par la culpabilité. TEST: un jeu de 1980 absolument démodé. ## trouver ça/ceci/cela + adj __gn_trouver_ça_adj__ >trouver [ça|cela|ceci] @:A.*:(?:f|m:p)¬:(?:G|3[sp]|M) <<- /gn/ -3>> =suggMasSing(\3) # Trouver \2 + [adjectif] : l’adjectif s’accorde avec “\2” (au masculin singulier). |
︙ | ︙ | |||
14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 | -2>> est # Confusion probable : “et” est une conjonction de coordination. Pour le verbe être à la 3ᵉ personne du singulier, écrivez “est”. TEST: où {{et}} cet ennemi ? TEST: où {{et}} l’homme qui est passé ce matin ? TEST: Je veux savoir où et quand, où et pouquoi. TEST: où et avec qui ? # faim / fin __conf_faim_fin__ >avoir (>fin) [>rester|>demeurer] sur [ma|ta|sa|notre|votre|leur|leurs] (>fin) <<- /conf/ -1>> faim # Confusion. Pour évoquer l’envie de se sustenter, écrivez “faim”. | > > > > > > > > > > > > > > > > > > > | 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 | -2>> est # Confusion probable : “et” est une conjonction de coordination. Pour le verbe être à la 3ᵉ personne du singulier, écrivez “est”. TEST: où {{et}} cet ennemi ? TEST: où {{et}} l’homme qui est passé ce matin ? TEST: Je veux savoir où et quand, où et pouquoi. TEST: où et avec qui ? __conf_été_était__ [le|ce|cet|mon|ton|son|notre|votre|leur|du|quel] *WORD >été <<- /conf/ morph(\2, ":N.*:m:[si]", ":[AWG]") and morph(<1, ":Cs|<start>|>,") --1>> était # Confusion possible. Si “\1 \2” est le sujet d’“\3”, écrivez “était”. L’été est la saison estivale allant de juin à septembre dans l’hémisphère Nord. [la|cette|mon|ton|son|ma|ta|sa|notre|votre|leur|quelle] *WORD >été <<- /conf/ morph(\2, ":N.*:f:[si]", ":[AWG]") and morph(<1, ":Cs|<start>|>,") --1>> était # Confusion possible. Si “\1 \2” est le sujet d’“\3”, écrivez “était”. L’été est la saison estivale allant de juin à septembre dans l’hémisphère Nord. [les|des|ces|mes|tes|ces|nos|vos|leurs|quelques|plusieurs|certains|certaines|quels|quelles] *WORD >été <<- /conf/ morph(\2, ":N.*:[pi]", ":[AWG]") and morph(<1, ":Cs|<start>|>,") --1>> étaient # Confusion possible. Si “\1 \2” est le sujet d’“\3”, écrivez “étaient”. L’été est la saison estivale allant de juin à septembre dans l’hémisphère Nord. TEST: Ce mec {{été}} un connard fini. ->> était TEST: Quelle solution {{été}} à notre portée ? ->> était TEST: Les questions {{étés}} incompréhensibles. ->> étaient TEST: Le bel été indien que nous avons cette année. # faim / fin __conf_faim_fin__ >avoir (>fin) [>rester|>demeurer] sur [ma|ta|sa|notre|votre|leur|leurs] (>fin) <<- /conf/ -1>> faim # Confusion. Pour évoquer l’envie de se sustenter, écrivez “faim”. |
︙ | ︙ | |||
15242 15243 15244 15245 15246 15247 15248 | TEST: à leur plus grand fils, ils ont offert une voiture. TEST: ça va d’autonome à hautement dépendant TEST: la pression entre les membres à un moment devient trop importante __infi_de_verbe__ [de|d’] [le|la|l’|leur|les] @:V¬:[YNAM]|>(?:lui|plus)/ | | > > > | > > | 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 | TEST: à leur plus grand fils, ils ont offert une voiture. TEST: ça va d’autonome à hautement dépendant TEST: la pression entre les membres à un moment devient trop importante __infi_de_verbe__ [de|d’] [le|la|l’|leur|les] @:V¬:[YNAM]|>(?:lui|plus)/ [<start>|,] [de|d’] [nous|vous|lui] @:V¬:[YE]|>(?:lui|plus)/ <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1) # Erreur probable. Après “de”, le verbe devrait être à l’infinitif. [de|d’] [ne|n’|en|me|m’|te|t’|se|s’|y] @:V¬:Y|>(?:lui|plus)/ [de|d’] [ne|n’] [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y] @:V¬:Y|>(?:lui|plus)/ [de|d’] ?[ne|n’]¿ [me|m’|te|t’|se|s’|nous|vous] [le|la|l’|les|en|y] @:V¬:Y [de|d’] ?[ne|n’]¿ [le|la|l’|les] [lui|leur|en|y] @:V¬:Y [de|d’] ?[ne|n’]¿ [lui|leur] en @:V¬:Y <<- /infi/ --1>> =suggVerbInfi(\-1) # Après “de”, le verbe devrait être à l’infinitif. en [droit|état|mesure] [de|d’] ?[nous|vous|le|la|l’|les|leur]¿ @:V1.*:Q <<- /infi/ --1>> =suggVerbInfi(\-1) # Le verbe devrait être à l’infinitif. [de|d’] @:V1.*:Q¬:N <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/") and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|rien(?: +[a-zéèêâîûù]+|) +$)") -2>> =suggVerbInfi(\2) # Le verbe devrait être à l’infinitif. TEST: d’en {{parlé}} sans cesse TEST: cela suffit de les {{aimait}} TEST: de ne leur en {{avancé}} que le nécessaire. TEST: de l’y {{poussé}} TEST: arrête d’y {{consacré}} autant de temps. TEST: je suis certain d’en {{choque}} plusieurs. TEST: elle était capable de la {{trouvait}} où qu’elle soit. TEST: de me le {{facturez}} TEST: Il s’agit de me {{donnait}} tout ça. TEST: j’étais incapable de m’{{orientait}} dans la bonne direction. TEST: ils étaient susceptibles de m’y {{trouvaient}} TEST: Il tentait de {{raisonné}} en homme libre TEST: sa façon de {{nettoyez}} était inefficace. TEST: elle a délibérément omis de les {{inclurent}}. TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ? TEST: elle s’engage de ne les lui donner qu’en dernier recours. TEST: l’idée consiste de la lui donner sans contrepartie et voir ce qu’il en fera. TEST: de leur plus grand fils, ils attendent beaucoup. TEST: de n’importe quelle manière TEST: un libéralisme trop « individualiste » s’est transformé en de supposées demandes de droits spécifiques TEST: soit 40 % de plus comparé au quinquennat précédent TEST: On passe de sophistiqué à classique. TEST: Les « événements » d’il y a cinquante ans n’ont sans doute « rien à voir » avec le mouvement des « gilets jaunes » TEST: Quelques points de gagnés avec cette astuce, ne faisons pas la fine bouche. __infi_y_verbe!3__ y ~ée?s?$ <<- /infi/ morph(\2, ":V", ":[123][sp]") -2>> _ # Le verbe ne devrait pas être un participe passé. TEST: y {{mangée}} était un supplice |
︙ | ︙ | |||
15324 15325 15326 15327 15328 15329 15330 | __infi_nous_vous_verbe__ [nous|vous] ~ée?s?$ <<- /infi/ morph(\2, ":Q") and not morph(<1, "V0.*[12]p") -2>> _ # Après “\1”, le verbe ne devrait pas être un participe passé. TEST: Nous {{intéressé}} à la question ne suffit pas à faire de nous des experts. TEST: nous {{ridiculisé}} TEST: vous {{mangé}} | | | 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 | __infi_nous_vous_verbe__ [nous|vous] ~ée?s?$ <<- /infi/ morph(\2, ":Q") and not morph(<1, "V0.*[12]p") -2>> _ # Après “\1”, le verbe ne devrait pas être un participe passé. TEST: Nous {{intéressé}} à la question ne suffit pas à faire de nous des experts. TEST: nous {{ridiculisé}} TEST: vous {{mangé}} TEST: Sommes-nous désespérés à ce point ? __infi_devoir_savoir_pouvoir_interrogatif__ /VCint ?[pas|jamais]¿ ?[en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ *WORD <<- /infi/ morphVC(\1, ">(?:devoir|savoir|pouvoir|vouloir)/") and morph(\-1, ":(?:Q|A|[123][sp])", ":[GYW]") --1>> =suggVerbInfi(\-1) # Après “\1”, le verbe devrait être à l’infinitif. |
︙ | ︙ | |||
16166 16167 16168 16169 16170 16171 16172 16173 16174 16175 16176 16177 16178 16179 | [ce|ça|ceci|cela|c’|ç’] >avoir été >seule [que|qu’] [ce|ça|ceci|cela|c’|ç’] >avoir été @:[AQ].*:f¬:[GWYme] @:N.*:f <<- %4>> [ce|ça|ceci|cela|c’|ç’] >être >seule [que|qu’] [ce|ça|ceci|cela|c’|ç’] >être @:[AQ].*:f¬:[GWYme] @:N.*:f <<- %3>> ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ (>avoir) [été|semblé|paru] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || [être|devenir|redevenir|rester] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] | > > > | 16339 16340 16341 16342 16343 16344 16345 16346 16347 16348 16349 16350 16351 16352 16353 16354 16355 | [ce|ça|ceci|cela|c’|ç’] >avoir été >seule [que|qu’] [ce|ça|ceci|cela|c’|ç’] >avoir été @:[AQ].*:f¬:[GWYme] @:N.*:f <<- %4>> [ce|ça|ceci|cela|c’|ç’] >être >seule [que|qu’] [ce|ça|ceci|cela|c’|ç’] >être @:[AQ].*:f¬:[GWYme] @:N.*:f <<- %3>> tout en étant @:A <<- %4>> ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ (>avoir) [été|semblé|paru] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] ([il|ce|c’|ç’|quiconque]) ?[ne|n’]¿ ?[en|y]¿ || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || [être|devenir|redevenir|rester] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:f¬:[GWYme]] |
︙ | ︙ | |||
16294 16295 16296 16297 16298 16299 16300 16301 16302 16303 16304 16305 16306 16307 | TEST: tout sera {{dissoute}} TEST: C’est donc seules que les deux femmes sont amenées à comparaître TEST: C’eût été pure imagination. TEST: Je n’arrêtais pas de me répéter que tout cela était peut-être pure imagination TEST: La femme qui faisait ça est partie. TEST: De cela a toujours été faite notre vie TEST: Ce sont différents types de violences __ppas_3sg_fem_verbe_état__ ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ (>avoir) [été|semblé|paru] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler]) [devenue|redevenue|restée|demeurée] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ | > > | 16470 16471 16472 16473 16474 16475 16476 16477 16478 16479 16480 16481 16482 16483 16484 16485 | TEST: tout sera {{dissoute}} TEST: C’est donc seules que les deux femmes sont amenées à comparaître TEST: C’eût été pure imagination. TEST: Je n’arrêtais pas de me répéter que tout cela était peut-être pure imagination TEST: La femme qui faisait ça est partie. TEST: De cela a toujours été faite notre vie TEST: Ce sont différents types de violences TEST: La littérature africaine s’ouvre au monde, parle au monde, tout en étant ancrée dans le continent. TEST: pour « faire de la politique avec leur député » sans « faire de travail pour l’Union européenne », mais tout en étant payés par elle. __ppas_3sg_fem_verbe_état__ ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ (>avoir) [été|semblé|paru] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler]) [devenue|redevenue|restée|demeurée] [@:[NA].*:p¬:[GWYsi]|@:[AQ].*:m¬:[GWYfe]] ([elle|celle-ci|celle-là]) ?[ne|n’]¿ ?[en|y]¿ |
︙ | ︙ | |||
16534 16535 16536 16537 16538 16539 16540 | TEST: celles-là imaginent être devenues légion __ppas_avoir_été__ >avoir été *WORD <<- /ppas/ morph(\3, ":[123]s", ":[GNAQWY]") -3>> =suggVerbPpas(\3) # Après “avoir été”, il faut un participe passé. <<- /ppas/ not before("[çcCÇ]’$|[cC]e n’$|[çÇ]a (?:n’|)$") and not before("(?i)^ *ne pas ") and not morph(<1, ":Y") >>> | | | > | 16712 16713 16714 16715 16716 16717 16718 16719 16720 16721 16722 16723 16724 16725 16726 16727 16728 16729 16730 16731 16732 16733 16734 16735 16736 16737 16738 16739 16740 16741 | TEST: celles-là imaginent être devenues légion __ppas_avoir_été__ >avoir été *WORD <<- /ppas/ morph(\3, ":[123]s", ":[GNAQWY]") -3>> =suggVerbPpas(\3) # Après “avoir été”, il faut un participe passé. <<- /ppas/ not before("[çcCÇ]’$|[cC]e n’$|[çÇ]a (?:n’|)$") and not before("(?i)^ *ne pas ") and not morph(<1, ":Y") >>> <<- /ppas/ morph(\3, ":Y", ":[AN]") -1:2>> _ # Tournure familière. Utilisez “être allé” plutôt que “avoir été”. <<- /ppas/ morph(\3, ":V1..t.*:Y", ":[AN]") -3>> =suggVerbPpas(\3) # Incohérence. Après “avoir été”, il faut un participe passé (à moins que “avoir été” signifie ici “être allé”). TEST: j’ai été {{instruis}} par elle TEST: avoir été {{prit}} par surprise TEST: Ils {{ont été}} {{réaliser}} à partir d’éléments naturels. TEST: J’{{ai été}} camper dans les Alpes. TEST: Tu {{as été}} prendre du bois. TEST: J’{{ai été}} {{chercher}} du pain. TEST: Mon grand-père aurait été fier. TEST: Ç’eût été prendre des vessies pour des lanternes. TEST: C’eût été foncer tête baissée dans la gueule du loup. TEST: Leur passe-temps, ça a été faire n’importe quoi. TEST: Ne pas ressortir le livre le plus remarqué de la collaboration aurait été faire acte de censure. TEST: Partir aurait été assurer sa survie. TEST: J’ai été conseiller régional !!!! Participes passés: accord en nombre avec la conjugaison de « être » (et équivalent) !! __ppas_être_accord_sing__ (*WORD) ?qui¿ ?[ne|n’]¿ ?[en|y]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) @:[NA].*:p¬:[GMWYsi] |
︙ | ︙ | |||
16652 16653 16654 16655 16656 16657 16658 | || [être|devenir|redevenir|rester] *WORD [<start>|,|@:Cs] [un|le|ce|cet] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] [un|le|ce|cet] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD | | | | 16831 16832 16833 16834 16835 16836 16837 16838 16839 16840 16841 16842 16843 16844 16845 16846 16847 16848 16849 16850 16851 16852 16853 16854 16855 16856 16857 16858 16859 16860 | || [être|devenir|redevenir|rester] *WORD [<start>|,|@:Cs] [un|le|ce|cet] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] [un|le|ce|cet] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD <<- /ppas/ morph(\1, ":[NA].*:[me]", ":[GWf]") and morph(\-1, ":A.*:f", ":[GWme]") and morph(\2, ":[123]s") --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || [être|devenir|redevenir|rester] *WORD [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || être [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] [une|la|ma|ta|sa|cette] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) || avoir [été|semblé|paru] *WORD <<- /ppas/ morph(\1, ":[NA].*:[fe]", ":[GWm]") and morph(\-1, ":A.*:m", ":[GWfe]") and morph(\2, ":[123]s") --1>> =switchGender(\-1) # Accord erroné : “\1” et “\-1” ne sont pas accordés en genre. [<start>|,|@:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]) *WORD [<start>|,|@:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [<start>|,|@:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] [l’|mon|ton|son|notre|votre|leur] (*WORD) ?qui¿ ?[ne|n’]¿ || ([>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]) |
︙ | ︙ | |||
16710 16711 16712 16713 16714 16715 16716 16717 16718 16719 16720 16721 16722 16723 | TEST: Le chien ne sera pas {{oubliés}} TEST: les femmes sont vraiment {{partis}} ->> parties TEST: les hommes ne sont pas tout à fait {{fâché}} ->> fâchés TEST: les enfants ne sont pas {{content}} TEST: les réunions sans cesse reportées sont {{annulés}} TEST: l’avenir de la région était {{suspendue}} TEST: il prétendait que les banques universelles « à la française » s’{{était}} très honorablement comportées __ppas_nom_propre_être_accord_genre__ [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ [>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ | > | 16889 16890 16891 16892 16893 16894 16895 16896 16897 16898 16899 16900 16901 16902 16903 | TEST: Le chien ne sera pas {{oubliés}} TEST: les femmes sont vraiment {{partis}} ->> parties TEST: les hommes ne sont pas tout à fait {{fâché}} ->> fâchés TEST: les enfants ne sont pas {{content}} TEST: les réunions sans cesse reportées sont {{annulés}} TEST: l’avenir de la région était {{suspendue}} TEST: il prétendait que les banques universelles « à la française » s’{{était}} très honorablement comportées TEST: Ma mémoire a aussi été {{effacé}}. __ppas_nom_propre_être_accord_genre__ [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ [>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ (>avoir) [été|semblé|paru] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ ([>être|>sembler]) [devenu|redevenu|resté|demeuré|devenue|redevenue|restée|demeurée] *WORD [<start>|,|@:Cs] (@M) ?qui¿ ?[ne|n’]¿ |
︙ | ︙ | |||
17183 17184 17185 17186 17187 17188 17189 | __immu_les_avoir_fait_vinfi__ les >avoir fait ?[me|m’|te|t’|se|s’|nous|vous|leur]¿ @:Y <<- %3>> __ppas_pronom_avoir__ [je|j’|tu|il|elle|on|ils|elles|et|qui] ?[ne|n’]¿ ?[lui|leur]¿ >avoir *WORD | | | | | | > > > > > > > > | 17363 17364 17365 17366 17367 17368 17369 17370 17371 17372 17373 17374 17375 17376 17377 17378 17379 17380 17381 17382 17383 17384 17385 17386 17387 17388 17389 17390 17391 17392 17393 17394 17395 17396 17397 17398 17399 17400 17401 17402 17403 | __immu_les_avoir_fait_vinfi__ les >avoir fait ?[me|m’|te|t’|se|s’|nous|vous|leur]¿ @:Y <<- %3>> __ppas_pronom_avoir__ [je|j’|tu|il|elle|on|ils|elles|et|qui] ?[ne|n’]¿ ?[lui|leur]¿ >avoir *WORD <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") and \-1.islower() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])") --1>> =suggVerbPpas(\-1, ":m:s") # 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 [je|j’|tu|il|elle|on|ils|elles|et|qui] ?[ne|n’]¿ en >avoir *WORD <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") and value(<1, "|<start>|,|comme|comment|et|lorsque|lorsqu’|mais|où|ou|quand|qui|pourquoi|puisque|puisqu’|quoique|quoiqu’|si|s’|sinon|") and \-1.islower() and morph(\-1, ":(?:[123][sp])", ":[GWQ]") --1>> =suggVerbPpas(\-1, ":m:s") # 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. ->> donné TEST: il a {{affronte}} une bande de voleurs de bétail ->> affronté TEST: J’ai {{mettrai}} du sel. ->> mis TEST: J’ai {{lut}} son journal. ->> lu TEST: Si j’avais {{sut}}. ->> su TEST: Il a {{prit}} le train. ->> pris TEST: Il a {{donner}} sa vie pour elle. ->> donné TEST: Ils leur ont {{données}} un cadeau. ->> donné TEST: ils avaient, en ce temps-là, déjà {{perdus}} leurs illusions ->> perdu TEST: Ils ont à plusieurs reprises {{perdus}} leur sang-froid. ->> perdu TEST: Elle avait {{pose}} son tricot ->> posé TEST: qui ont {{refuse}} de se soumettre ->> refusé TEST: il a {{suffit}} de le pousser un peu ->> suffi TEST: il en a toujours {{était}} ainsi ->> été TEST: Ils avaient barre sur lui. __ppas_nous_vous_avoir__ [nous|vous] ?[ne|n’]¿ ?[lui|leur]¿ >avoir *WORD <<- /ppas/ morph(\1, ":Os") and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") |
︙ | ︙ | |||
17280 17281 17282 17283 17284 17285 17286 17287 17288 17289 17290 17291 17292 17293 | # Accord avec “l’” : le participe passé “\3” devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: ils l’avaient {{retrouvés}}. TEST: Vous l’avez {{trouvez}}. ->> trouvé TEST: Nous l’avons {{mangés}}. TEST: Nous l’avons {{mangées}}. TEST: Ils ne me l’ont pas {{donnés}} __ppas_m_t_avoir__ [m’|t’] >avoir @:V[0-3]..t_.*:Q.*:p¬:[GWsi] <<- /ppas/ not before("(?i)\\bqu(?:e |’)") -3>> =suggSing(\3) # Accord avec “\1”. S’il s’agit d’un COD, le participe passé “\3” devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais | > | 17468 17469 17470 17471 17472 17473 17474 17475 17476 17477 17478 17479 17480 17481 17482 | # Accord avec “l’” : le participe passé “\3” devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais TEST: ils l’avaient {{retrouvés}}. TEST: Vous l’avez {{trouvez}}. ->> trouvé TEST: Nous l’avons {{mangés}}. TEST: Nous l’avons {{mangées}}. TEST: Ils ne me l’ont pas {{donnés}} TEST: il faillit agir, mais l’ayant {{remarqués}}, il passa son chemin. __ppas_m_t_avoir__ [m’|t’] >avoir @:V[0-3]..t_.*:Q.*:p¬:[GWsi] <<- /ppas/ not before("(?i)\\bqu(?:e |’)") -3>> =suggSing(\3) # Accord avec “\1”. S’il s’agit d’un COD, le participe passé “\3” devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais |
︙ | ︙ | |||
18609 18610 18611 18612 18613 18614 18615 | -2:3>> \2-elle # Forme interrogative ? Mettez un trait d’union. TEST: {{vient elle}} souvent ? TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça. TEST: C’était elle qui avait pris le contrôle. | | > > > > > | 18798 18799 18800 18801 18802 18803 18804 18805 18806 18807 18808 18809 18810 18811 18812 18813 18814 18815 18816 18817 18818 18819 18820 18821 18822 18823 18824 18825 18826 | -2:3>> \2-elle # Forme interrogative ? Mettez un trait d’union. TEST: {{vient elle}} souvent ? TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça. TEST: C’était elle qui avait pris le contrôle. __inte_union_nous!6__ [<start>|,] ~ons$ nous <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and morph(>1, ":|<end>|,", ":1p") -2:3>> \2-nous # Forme interrogative ? Mettez un trait d’union. [<start>|,] sommes nous <<- /inte/ space_after(\2, 1, 1) -2:3>> \2-nous # Forme interrogative ? Mettez un trait d’union. *WORD ~ons$ nous <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os") and morph(>1, ":|<end>|,", ":(?:Y|1p)") -2:3>> \2-nous # Forme interrogative ? Mettez un trait d’union. TEST: {{retrouverons nous}} enfin la tranquilité ? TEST: Ne {{sommes nous}} pas des dieux ? __inte_union_vous__ [<start>|,] ~..e[zs]$ vous <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and morph(>1, ":|<end>|,", ":2p") -2:3>> \2-vous # Forme interrogative ? Mettez un trait d’union. |
︙ | ︙ | |||
18808 18809 18810 18811 18812 18813 18814 18815 18816 18817 18818 18819 18820 18821 | #### PARTICIPES PASSÉS APRÈS ÊTRE __ppas_être__ ne [pas|jamais] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) <<- /ppas/ --1>> =suggVerbPpas(\-1) # Après “ne \2 être”, il faut un participe passé. >être ~..er$ <<- /ppas/ not tag(\2, "upron") and morph(\1, ":V", ":Q|>(?:soit)/") and (morph(\2, ":Y", ":[NAQ]") or \2 in aSHOULDBEVERB) and not morph(<1, ":Y|>ce") and not value(<1, "|c’|") and not tag_before(\1, "ce_que") and not tag_before(\1, "suj_vinfi") -2>> =suggVerbPpas(\2) # Après “être”, le verbe ne devrait pas être à l’infinitif. >être ~..ez$ | > > > | 19002 19003 19004 19005 19006 19007 19008 19009 19010 19011 19012 19013 19014 19015 19016 19017 19018 | #### PARTICIPES PASSÉS APRÈS ÊTRE __ppas_être__ ne [pas|jamais] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) <<- /ppas/ --1>> =suggVerbPpas(\-1) # Après “ne \2 être”, il faut un participe passé. avoir [pu|cru|pensé|imaginé] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p) <<- /ppas/ not value(<1, "|l’|") and not tag_before("que") --1>> =suggVerbPpas(\-1) # Après le verbe “être”, il faut un participe passé. >être ~..er$ <<- /ppas/ not tag(\2, "upron") and morph(\1, ":V", ":Q|>(?:soit)/") and (morph(\2, ":Y", ":[NAQ]") or \2 in aSHOULDBEVERB) and not morph(<1, ":Y|>ce") and not value(<1, "|c’|") and not tag_before(\1, "ce_que") and not tag_before(\1, "suj_vinfi") -2>> =suggVerbPpas(\2) # Après “être”, le verbe ne devrait pas être à l’infinitif. >être ~..ez$ |
︙ | ︙ | |||
18909 18910 18911 18912 18913 18914 18915 | TEST: Quiconque {{pensez}} s’en sortir se trompait lourdement. TEST: Il voulut punir quiconque s’y {{adonnaient}}. TEST: quiconque issu de la gauche n’a aucune chance. __conj_ce_celui_celle_qui__ | > > > | > > | | > > | > | | > > > > > | 19106 19107 19108 19109 19110 19111 19112 19113 19114 19115 19116 19117 19118 19119 19120 19121 19122 19123 19124 19125 19126 19127 19128 19129 19130 19131 19132 19133 19134 19135 19136 19137 19138 19139 19140 19141 19142 19143 19144 19145 19146 19147 19148 19149 19150 19151 19152 19153 19154 19155 19156 19157 19158 19159 19160 19161 19162 | TEST: Quiconque {{pensez}} s’en sortir se trompait lourdement. TEST: Il voulut punir quiconque s’y {{adonnaient}}. TEST: quiconque issu de la gauche n’a aucune chance. __conj_ce_celui_celle_qui__ [ce|celui] qui @:V¬:(?:3s|P|Q|G) <<- /conj/ -3>> =suggVerb(\3, ":3s") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du singulier. celle qui @:V¬:(?:3s|P|Q|G) <<- /conj/ -3>> =suggVerb(\3, ":3s") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du singulier. <<- /conj/ morph(\3, ":[123]p") -1>> celles # Conjugaison erronée. Accord avec “\3”. Le sujet devrait être au pluriel. TEST: Ce qui, la plupart du temps, {{donnes}} des maux de tête. TEST: Ce qui {{fâchent}} mes amis. TEST: celui qui {{pensent}} mal de toute chose TEST: {{celle}} qui y {{parviendront}} seront récompensées. __conj_3sg_misc__ [ça|chacun|chacune|ceci|cela|celui-ci|celui-là|quelqu’un|quelqu’une] @:V¬:(?:3s|P|Q|G|M|3p!) <<- /conj/ not morph(<1, ":[VR]") -2>> =suggVerb(\2, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. [celle-ci|celle-là] @:V¬:(?:3s|P|Q|G|M|3p!) <<- /conj/ not morph(<1, ":[VR]") -2>> =suggVerb(\2, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. <<- /conj/ __also__ and morph(\2, ":[123]p") -1>> =\1.replace("e-", "es-").replace("E-", "ES-") # Conjugaison erronée. Accord avec “\2”. Le sujet devrait être au pluriel. [ça|chacun|chacune|ceci|cela|celui-ci|celui-là|quelqu’un|quelqu’une] qui @:V¬:(?:3s|P|Q|G|M|3p!) <<- /conj/ -3>> =suggVerb(\3, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. [celle-ci|celle-là] qui @:V¬:(?:3s|P|Q|G|M|3p!) <<- /conj/ -3>> =suggVerb(\3, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. <<- /conj/ morph(\3, ":[123]p") -1>> =\1.replace("e-", "es-").replace("E-", "ES-") # Conjugaison erronée. Accord avec “\3”. Le sujet devrait être au pluriel. l’ [un|une] @:V¬:(?:3s|P|Q|G|M|3p!) quelque chose @:V¬:(?:3s|P|Q|G|M|3p!) n’importe [qui|quoi] @:V¬:(?:3s|P|Q|G|M|3p!) <<- /conj/ not morph(<1, ":[VR]") --1>> =suggVerb(\-1, ":3s") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du singulier. l’ [un|une] qui @:V¬:(?:3s|P|Q|G|3p!) quelque chose qui @:V¬:(?:3s|P|Q|G|3p!) n’importe [qui|quoi] qui @:V¬:(?:3s|P|Q|G|3p!) <<- /conj/ --1>> =suggVerb(\-1, ":3s") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: chacun {{fais}} comme il peut TEST: quelqu’un {{sauras}} TEST: quelqu’une se {{montrent}} désagréable TEST: {{celle-ci}} {{deviennent}} plus fortes avec le temps. TEST: n’importe quoi {{peux}} réussir TEST: n’importe qui {{peux}} y arriver. TEST: quelque chose {{sens}} mauvais ici TEST: l’un d’eux {{viendras}} TEST: ce {{dois}} être ennuyeux TEST: ce {{seras}} foutu TEST: mais ça ne vous {{aideras}} en rien |
︙ | ︙ | |||
19014 19015 19016 19017 19018 19019 19020 | TEST: aucun ne {{vas}} là-bas TEST: il ne faut rien faire ou rien dire contre les manifestants TEST: qui n’ont rien appris et rien oublié TEST: comme si son pays n’avait rien appris du fascisme ni rien reçu de l’Europe __conj_nul_nulle__ | | | | | | | > > > > > > > > > > > > | 19224 19225 19226 19227 19228 19229 19230 19231 19232 19233 19234 19235 19236 19237 19238 19239 19240 19241 19242 19243 19244 19245 19246 19247 19248 19249 19250 19251 19252 19253 19254 19255 19256 19257 19258 | TEST: aucun ne {{vas}} là-bas TEST: il ne faut rien faire ou rien dire contre les manifestants TEST: qui n’ont rien appris et rien oublié TEST: comme si son pays n’avait rien appris du fascisme ni rien reçu de l’Europe __conj_nul_nulle__ [nul|nulle] ?@:[NA]¿ ?qui¿ @:V¬:(?:3s|P|G|N.*:[si]) <<- /conj/ morph(<1, ":Cs|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)") --1>> =suggVerb(\-1, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: nul ne {{savaient}} que faire TEST: nulle n’{{iront}} là-bas TEST: nulle femme ne {{sauraient}} le faire TEST: nul homme ne {{sauraient}} s’y prendre TEST: nulle partie du corps ne peut être considérée comme le siège de l’âme. __conj_aucun_aucune__ [aucun|aucune] ?@:[NA]¿ ?qui¿ @:V¬:(?:3s|P|G|N.*:[si]) <<- /conj/ morph(<1, ":Cs|<start>|>,", ":(?:Y|P|Q|[123][sp]|R)") --1>> =suggVerb(\-1, ":3s") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du singulier. TEST: aucun ne {{savaient}} que faire TEST: aucune n’{{iront}} là-bas TEST: aucune femme ne {{sauraient}} le faire TEST: aucun homme ne {{sauraient}} s’y prendre TEST: aucune partie du corps ne peut être considérée comme le siège de l’âme. __conj_vinfi_suj__ [<start>|,] @:Y @:V¬:(?:3s|P|Q.*:[me]:[si]|Y|G|3p!|M) <<- /conj/ not (value(\2, "|croire|être|devenir|redevenir|voir|sembler|paraître|paraitre|sentir|rester|retrouver|") and morph(\3, ":A")) -3>> =suggVerb(\3, ":3s") # Conjugaison erronée. Accord avec “\2”. Le verbe devrait être à la 3ᵉ personne du singulier. |
︙ | ︙ | |||
19191 19192 19193 19194 19195 19196 19197 | TEST: {{elles}} {{avance}} rapidement sur ce projet TEST: {{Elles}} n’y {{comprenne}} rien TEST: L’expérience sensible qu’il nous restera bientôt d’elles est à peu près TEST: eux attaqués par des mécanoïdes, elles attaquées par des insectoïdes. __conj_ceux_celles_qui__ | | > > > > | > > > | > > > > | > | | 19413 19414 19415 19416 19417 19418 19419 19420 19421 19422 19423 19424 19425 19426 19427 19428 19429 19430 19431 19432 19433 19434 19435 19436 19437 19438 19439 19440 19441 19442 19443 19444 19445 19446 19447 19448 19449 19450 19451 19452 19453 19454 | TEST: {{elles}} {{avance}} rapidement sur ce projet TEST: {{Elles}} n’y {{comprenne}} rien TEST: L’expérience sensible qu’il nous restera bientôt d’elles est à peu près TEST: eux attaqués par des mécanoïdes, elles attaquées par des insectoïdes. __conj_ceux_celles_qui__ ceux qui @:V¬:(?:3p|P|G) <<- /conj/ -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du pluriel. celles qui @:V¬:(?:3p|P|G) <<- /conj/ -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ morph(\3, ":[123]s") -1>> celle # Conjugaison erronée. Accord avec “\3”. Le sujet devrait être au singulier. TEST: Ceux qui {{chante}} toute la journée… TEST: {{Celles}} qui {{pense}}. __conj_ceux_là_celles_ci__ [ceux-ci|ceux-là] @:V¬:(?:3p|P|Q|G|M) <<- /conj/ not morph(<1, ":[VR]") -2>> =suggVerb(\2, ":3p") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel. [celles-ci|celles-là] @:V¬:(?:3p|P|Q|G|M) <<- /conj/ not morph(<1, ":[VR]") -2>> =suggVerb(\2, ":3p") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ __also__ and morph(\2, ":[123]s") -1>> =\1.replace("s", "").replace("S", "") # Conjugaison erronée. Accord avec “\2”. Le sujet devrait être au singulier. [ceux-ci|ceux-là] qui @:V¬:(?:3p|P|Q|G|M) <<- /conj/ -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du pluriel. [celles-ci|celles-là] qui @:V¬:(?:3p|P|Q|G|M) <<- /conj/ -3>> =suggVerb(\3, ":3p") # Conjugaison erronée. Accord avec “\1 \2”. Le verbe devrait être à la 3ᵉ personne du pluriel. <<- /conj/ morph(\3, ":[123]s") -1>> =\1.replace("s", "").replace("S", "") # Conjugaison erronée. Accord avec “\3”. Le sujet devrait être au singulier. TEST: ceux-là {{devienne}} des ratés TEST: {{celles-ci}} qui {{semble}} avoir tout pour réussir. __conj_lesquels_lesquelles__ [lesquels|lesquelles] @:V¬:(?:3p|P|Y|Q|G|M) <<- /conj/ not morph(<1, ":[VR]") -2>> =suggVerb(\2, ":3p") # Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel. TEST: lesquels {{devienne}} des ennuyeux incomparables. |
︙ | ︙ | |||
19428 19429 19430 19431 19432 19433 19434 | TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées TEST: Macron président, c’est… # 3pl __conj_nom_propre_et_nom_propre__ ~^[A-ZÉÈ] et ~^[A-ZÉÈ] @:[123][sp]¬:(?:G|3p|P|Q.*:[pi]) | | | > > | 19662 19663 19664 19665 19666 19667 19668 19669 19670 19671 19672 19673 19674 19675 19676 19677 19678 19679 19680 19681 19682 | TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées TEST: Macron président, c’est… # 3pl __conj_nom_propre_et_nom_propre__ ~^[A-ZÉÈ] et ~^[A-ZÉÈ] @:[123][sp]¬:(?:G|3p|P|Q.*:[pi]) <<- /conj/ morph(\1, ":M") and morph(\3, ":M") and not morph(<1, ":[RV]|>(?:des?|du|et|ou|ni)/") -4>> =suggVerb(\4, ":3p") # Conjugaison erronée. Accord avec “\1 et \3”. Le verbe devrait être à la 3ᵉ personne du pluriel. TEST: Samantha et Eva {{viennes}} demain. TEST: Samantha et Eva leur {{décrive}} une leçon. TEST: La relation spéciale qu’entretiennent Donald et Kim met paradoxalement en péril les discussions entre les deux pays. TEST: La menace d’une guerre nucléaire entre Delhi et Islamabad plane toujours # on / ont __conf_ont!6__ ils on [eux|ceux|elles|celles] qui on <<- /conf/ --1>> ont # Confusion probable : “on” est un pronom personnel. Pour la conjugaison du verbe “avoir”, écrivez “ont”. |
︙ | ︙ | |||
19598 19599 19600 19601 19602 19603 19604 19605 19606 19607 19608 19609 19610 19611 | [je|j’|tu|il|elle|on|ils|nous|vous|elle|elles] >avoir @:V.......e_.*:Q <<- /conf/ -2>> _ # Incohérence. La forme verbale “\3” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”. TEST: {{Ait-il}} arrivé à ses fins ? TEST: je n’{{avais}} pas parti avec eux. TEST: il {{avait}} parti. TEST: Avais-je partie liée avec lui ? !! !! !!!! Modes verbaux !! !! !! | > | 19834 19835 19836 19837 19838 19839 19840 19841 19842 19843 19844 19845 19846 19847 19848 | [je|j’|tu|il|elle|on|ils|nous|vous|elle|elles] >avoir @:V.......e_.*:Q <<- /conf/ -2>> _ # Incohérence. La forme verbale “\3” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”. TEST: {{Ait-il}} arrivé à ses fins ? TEST: je n’{{avais}} pas parti avec eux. TEST: il {{avait}} parti. TEST: Avais-je partie liée avec lui ? TEST: il n’y a pas mort d’homme, mais il y a mort de meuf. !! !! !!!! Modes verbaux !! !! !! |
︙ | ︙ | |||
19922 19923 19924 19925 19926 19927 19928 | !! !! !! !!! À trier !! TODO: Il faut au préalable avoir {{définit}} un protocole. | < < < < < < | 20159 20160 20161 20162 20163 20164 20165 20166 20167 20168 20169 20170 20171 20172 20173 20174 20175 20176 20177 20178 20179 20180 20181 20182 20183 20184 20185 20186 20187 20188 20189 20190 20191 | !! !! !! !!! À trier !! TODO: Il faut au préalable avoir {{définit}} un protocole. TODO: Vous la {{voulait}} TODO: un délire systématisé de persécution basé sur des interprétations TODO: Soudain, surgit l’un des ouvriers… TODO: Ainsi périt l’inconstant. TODO: puis repartit. TODO: Les créatures de l’enfer que nous avions rencontrées… TODO: Étaient-ils vraiment frère et sœur TODO: Cela fait des années qu’elle n’a pas donné signe de vie. TODO: Ce qu’ils sont influence leur regard sur moi. TODO: Ils sont âgés de 4 et 1 ans. TODO: Mille neuf cent quatre-vingt. (dépend du contexte) TODO: La Mustang est une voiture. TODO: Il faut se bien connaître soi-même. TODO: C’est lui ou moi qui a gagné. TODO: Des copains plus vieux que moi qui fumaient. TODO: Des copains plus vieux que toi qui fumaient. TODO: André Juin était un sculpteur français. TODO: La bataille de Monte Cassino révèle le génie militaire du général Juin. TODO: Les côtes sont dans leur ensemble extrêmement découpées. !!! Indécidable !! TEST: Du sable fin grippe les rouages (accord avec ce qui précède). TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit). !!! Autres tests !! TEST: Ça a l’air de t’aller. |
︙ | ︙ | |||
20028 20029 20030 20031 20032 20033 20034 20035 20036 20037 20038 20039 20040 20041 | TEST: En 1944, au sortir des deux guerres ayant ravagé l’Europe, le CNR (conseil national de la résistance) avait bien mesuré les tenants et les aboutissants, c’est-à-dire les causes et les conséquences du ravage des inégalités et du jusqu’au boutisme de l’auto-défense d’une caste pour préserver ses acquis. TEST: Ceux de l’Université sont plus perfectionnés TEST: Celles de l’Institut sont plus perfectionnées TEST: Judith A. Allan a aussi constaté que les études sur les crises de la masculinité ne proposent pas ou que très rarement d’indicateurs pour déterminer si une société est (trop) féminisée et si les hommes sont (réellement) en crise. TEST: une procédure abusive pour fermer la porte qu’elles ont essayé d’ouvrir TEST: En France, les hauts fonctionnaires gagnent en moyenne 7850 euros net TEST: Il faut avoir du pouvoir et des ressources !!! Tests historiques !! ## Version 0.5.14 TEST: par le léger tissu de rayonne qui les protégeait en ce moment. | > > > > > > > > | 20259 20260 20261 20262 20263 20264 20265 20266 20267 20268 20269 20270 20271 20272 20273 20274 20275 20276 20277 20278 20279 20280 | TEST: En 1944, au sortir des deux guerres ayant ravagé l’Europe, le CNR (conseil national de la résistance) avait bien mesuré les tenants et les aboutissants, c’est-à-dire les causes et les conséquences du ravage des inégalités et du jusqu’au boutisme de l’auto-défense d’une caste pour préserver ses acquis. TEST: Ceux de l’Université sont plus perfectionnés TEST: Celles de l’Institut sont plus perfectionnées TEST: Judith A. Allan a aussi constaté que les études sur les crises de la masculinité ne proposent pas ou que très rarement d’indicateurs pour déterminer si une société est (trop) féminisée et si les hommes sont (réellement) en crise. TEST: une procédure abusive pour fermer la porte qu’elles ont essayé d’ouvrir TEST: En France, les hauts fonctionnaires gagnent en moyenne 7850 euros net TEST: Il faut avoir du pouvoir et des ressources TEST: Le con de jadis ne dérangeait personne, maintenant il répand sa haine et son inculture sur les réseaux sociaux. TEST: Les hommes qui se servaient de lui espéraient l’amadouer… TEST: Celui qui se servait de lui voulait lui donner une bonne leçon. TEST: Le CAPES de mathématiques. TEST: cet être que personne n’a vu ni senti à part elle TEST: un délire systématisé de persécution basé sur des interprétations TEST: Et si je te donne son nom, cela t’aiderait, Dworkin ? !!! Tests historiques !! ## Version 0.5.14 TEST: par le léger tissu de rayonne qui les protégeait en ce moment. |
︙ | ︙ | |||
23028 23029 23030 23031 23032 23033 23034 | TEST: Quand elle fut endormie : TEST: — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. TEST: Puis il la réveilla. Je tirai de ma poche un portefeuille : TEST: — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. TEST: Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. TEST: Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. TEST: 19 juillet. — Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? | | | 23267 23268 23269 23270 23271 23272 23273 23274 23275 23276 23277 23278 23279 23280 23281 | TEST: Quand elle fut endormie : TEST: — Votre mari n’a plus besoin de cinq mille francs ! Vous allez donc oublier que vous avez prié votre cousin de vous les prêter, et, s’il vous parle de cela, vous ne comprendrez pas. TEST: Puis il la réveilla. Je tirai de ma poche un portefeuille : TEST: — Voici, ma chère cousine, ce que vous m’avez demandé ce matin. TEST: Elle fut tellement surprise que je n’osai pas insister. J’essayai cependant de ranimer sa mémoire, mais elle nia avec force, crut que je me moquais d’elle, et faillit, à la fin, se fâcher. TEST: Voilà ! je viens de rentrer ; et je n’ai pu déjeuner, tant cette expérience m’a bouleversé. TEST: 19 juillet. — Beaucoup de personnes à qui j’ai raconté cette aventure se sont moquées de moi. Je ne sais plus que penser. Le sage dit : Peut-être ? TEST: 21 juillet. — J’ai été dîner à Bougival, puis j’ai passé la soirée au bal des canotiers. Décidément, tout dépend des lieux et des milieux. TEST: Croire au surnaturel dans l’île de la Grenouillère, serait le comble de la folie… mais au sommet du mont Saint-Michel ?… mais dans les Indes ? TEST: Nous subissons effroyablement l’influence de ce qui nous entoure. Je rentrerai chez moi la semaine prochaine. TEST: 30 juillet. — Je suis revenu dans ma maison depuis hier. Tout va bien. TEST: 2 août. — Rien de nouveau ; il fait un temps superbe. Je passe mes journées à regarder couler la Seine. TEST: 4 août. — Querelles parmi mes domestiques. Ils prétendent qu’on casse les verres, la nuit, dans les armoires. TEST: Le valet de chambre accuse la cuisinière, qui accuse la lingère, qui accuse les deux autres. Quel est le coupable ? Bien fin qui le dirait ! TEST: 6 août. — Cette fois, je ne suis pas fou. J’ai vu… j’ai vu… j’ai vu !… Je ne puis plus douter… j’ai vu !… J’ai encore froid jusque dans les ongles… j’ai encore peur jusque dans les moelles… j’ai vu !… |
︙ | ︙ |
Modified gc_lang/fr/webext/content_scripts/init.js from [6e32e0cbb4] to [649f297b3c].
︙ | ︙ | |||
100 101 102 103 104 105 106 107 108 109 110 111 112 113 | } } } }, observePage: function () { // When a textarea is added via jascript we add the menu let that = this; this.xObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { for (let i = 0; i < mutation.addedNodes.length; i++){ if (mutation.addedNodes[i].tagName == "TEXTAREA") { if (that.oOptions === null || that.oOptions.textarea) { oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, mutation.addedNodes[i])); | > | 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | } } } }, observePage: function () { // When a textarea is added via jascript we add the menu let that = this; let that = this; this.xObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { for (let i = 0; i < mutation.addedNodes.length; i++){ if (mutation.addedNodes[i].tagName == "TEXTAREA") { if (that.oOptions === null || that.oOptions.textarea) { oGrammalecte.lMenu.push(new GrammalecteMenu(oGrammalecte.nMenu, mutation.addedNodes[i])); |
︙ | ︙ |
Modified graphspell-js/char_player.js from [aaed91ab4d] to [ac09087eb7].
︙ | ︙ | |||
25 26 27 28 29 30 31 | ['à', 'a'], ['é', 'e'], ['î', 'i'], ['ô', 'o'], ['û', 'u'], ['ÿ', 'i'], ['y', 'i'], ['â', 'a'], ['è', 'e'], ['ï', 'i'], ['ö', 'o'], ['ù', 'u'], ['ŷ', 'i'], ['ä', 'a'], ['ê', 'e'], ['í', 'i'], ['ó', 'o'], ['ü', 'u'], ['ý', 'i'], ['á', 'a'], ['ë', 'e'], ['ì', 'i'], ['ò', 'o'], ['ú', 'u'], ['ỳ', 'i'], ['ā', 'a'], ['ē', 'e'], ['ī', 'i'], ['ō', 'o'], ['ū', 'u'], ['ȳ', 'i'], ['ç', 'c'], ['ñ', 'n'], ['k', 'q'], ['w', 'v'], ['œ', 'oe'], ['æ', 'ae'], | | > > > > > > > > > > > > > | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | ['à', 'a'], ['é', 'e'], ['î', 'i'], ['ô', 'o'], ['û', 'u'], ['ÿ', 'i'], ['y', 'i'], ['â', 'a'], ['è', 'e'], ['ï', 'i'], ['ö', 'o'], ['ù', 'u'], ['ŷ', 'i'], ['ä', 'a'], ['ê', 'e'], ['í', 'i'], ['ó', 'o'], ['ü', 'u'], ['ý', 'i'], ['á', 'a'], ['ë', 'e'], ['ì', 'i'], ['ò', 'o'], ['ú', 'u'], ['ỳ', 'i'], ['ā', 'a'], ['ē', 'e'], ['ī', 'i'], ['ō', 'o'], ['ū', 'u'], ['ȳ', 'i'], ['ç', 'c'], ['ñ', 'n'], ['k', 'q'], ['w', 'v'], ['œ', 'oe'], ['æ', 'ae'], ['ſ', 's'], ['ffi', 'ffi'], ['ffl', 'ffl'], ['ff', 'ff'], ['ſt', 'ft'], ['fi', 'fi'], ['fl', 'fl'], ['st', 'st'], ["⁰", "0"], ["¹", "1"], ["²", "2"], ["³", "3"], ["⁴", "4"], ["⁵", "5"], ["⁶", "6"], ["⁷", "7"], ["⁸", "8"], ["⁹", "9"] ]), simplifyWord: function (sWord) { // word simplication before calculating distance between words sWord = sWord.toLowerCase(); sWord = [...sWord].map(c => this._xTransCharsForSimplification.gl_get(c, c)).join(''); let sNewWord = ""; let i = 1; for (let c of sWord) { if (c == 'e' || c != sWord.slice(i, i+1)) { // exception for <e> to avoid confusion between crée / créai sNewWord += c; } i++; } return sNewWord.replace(/eau/g, "o").replace(/au/g, "o").replace(/ai/g, "ẽ").replace(/ei/g, "ẽ").replace(/ph/g, "f"); }, _xTransNumbersToExponent: new Map([ ["0", "⁰"], ["1", "¹"], ["2", "²"], ["3", "³"], ["4", "⁴"], ["5", "⁵"], ["6", "⁶"], ["7", "⁷"], ["8", "⁸"], ["9", "⁹"] ]), numbersToExponent: function (sWord) { let sNewWord = ""; for (let c of sWord) { sNewWord += this._xTransNumbersToExponent.gl_get(c, c); } return sNewWord; }, aVowel: new Set("aáàâäāeéèêëēiíìîïīoóòôöōuúùûüūyýỳŷÿȳœæAÁÀÂÄĀEÉÈÊËĒIÍÌÎÏĪOÓÒÔÖŌUÚÙÛÜŪYÝỲŶŸȲŒÆ"), aConsonant: new Set("bcçdfghjklmnñpqrstvwxzBCÇDFGHJKLMNÑPQRSTVWXZ"), aDouble: new Set("bcdfjklmnprstzBCDFJKLMNPRSTZ"), // letters that may be used twice successively // Similar chars |
︙ | ︙ |
Modified graphspell-js/ibdawg.js from [eb5a5d5e73] to [5fadd970c2].
︙ | ︙ | |||
341 342 343 344 345 346 347 348 349 350 351 352 353 354 | return aSugg.map( (sSugg) => { return sPfx + sSugg + sSfx; } ); } //console.timeEnd("Suggestions for " + sWord); return aSugg; } _splitSuggest (oSuggResult, sWord) { for (let cSplitter of "'’") { if (sWord.includes(cSplitter)) { let [sWord1, sWord2] = sWord.split(cSplitter, 2); if (this.isValid(sWord1) && this.isValid(sWord2)) { oSuggResult.addSugg(sWord1+" "+sWord2); } } | > > > > > > | 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 | return aSugg.map( (sSugg) => { return sPfx + sSugg + sSfx; } ); } //console.timeEnd("Suggestions for " + sWord); return aSugg; } _splitSuggest (oSuggResult, sWord) { // split trailing numbers let m = /^([a-zA-Zà-öÀ-Ö_ø-ÿØ-ßĀ-ʯfi-st][a-zA-Zà-öÀ-Ö_ø-ÿØ-ßĀ-ʯfi-st-]+)([0-9]+)$/.exec(sWord); if (m) { oSuggResult.addSugg(m[1] + " " + char_player.numbersToExponent(m[2])); } // split at apostrophes for (let cSplitter of "'’") { if (sWord.includes(cSplitter)) { let [sWord1, sWord2] = sWord.split(cSplitter, 2); if (this.isValid(sWord1) && this.isValid(sWord2)) { oSuggResult.addSugg(sWord1+" "+sWord2); } } |
︙ | ︙ | |||
362 363 364 365 366 367 368 | if (sRemain == "") { oSuggResult.addSugg(sNewWord); for (let sTail of this._getTails(iAddr)) { oSuggResult.addSugg(sNewWord+sTail); } return; } | | | 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 | if (sRemain == "") { oSuggResult.addSugg(sNewWord); for (let sTail of this._getTails(iAddr)) { oSuggResult.addSugg(sNewWord+sTail); } return; } else if ( (sNewWord.length + sRemain.length == oSuggResult.sWord.length) && oSuggResult.sWord.toLowerCase().startsWith(sNewWord.toLowerCase()) && this.isValid(sRemain) ) { oSuggResult.addSugg(sNewWord+" "+sRemain); } } if (nDist > oSuggResult.nDistLimit) { return; } |
︙ | ︙ |
Modified graphspell/char_player.py from [64714404fb] to [01c5a83d44].
︙ | ︙ | |||
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 'â': 'a', 'è': 'e', 'ï': 'i', 'ö': 'o', 'ù': 'u', 'ŷ': 'i', 'ä': 'a', 'ê': 'e', 'í': 'i', 'ó': 'o', 'ü': 'u', 'ý': 'i', 'á': 'a', 'ë': 'e', 'ì': 'i', 'ò': 'o', 'ú': 'u', 'ỳ': 'i', 'ā': 'a', 'ē': 'e', 'ī': 'i', 'ō': 'o', 'ū': 'u', 'ȳ': 'i', 'ç': 'c', 'ñ': 'n', 'k': 'q', 'w': 'v', 'œ': 'oe', 'æ': 'ae', 'ſ': 's', 'ffi': 'ffi', 'ffl': 'ffl', 'ff': 'ff', 'ſt': 'ft', 'fi': 'fi', 'fl': 'fl', 'st': 'st', }) def simplifyWord (sWord): "word simplication before calculating distance between words" sWord = sWord.lower().translate(_xTransCharsForSimplification) sNewWord = "" for i, c in enumerate(sWord, 1): if c == 'e' or c != sWord[i:i+1]: # exception for <e> to avoid confusion between crée / créai sNewWord += c return sNewWord.replace("eau", "o").replace("au", "o").replace("ai", "ẽ").replace("ei", "ẽ").replace("ph", "f") aVowel = set("aáàâäāeéèêëēiíìîïīoóòôöōuúùûüūyýỳŷÿȳœæAÁÀÂÄĀEÉÈÊËĒIÍÌÎÏĪOÓÒÔÖŌUÚÙÛÜŪYÝỲŶŸȲŒÆ") aConsonant = set("bcçdfghjklmnñpqrstvwxzBCÇDFGHJKLMNÑPQRSTVWXZ") aDouble = set("bcdfjklmnprstzBCDFJKLMNPRSTZ") # letters that may be used twice successively # Similar chars | > > > > > > > > > | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 'â': 'a', 'è': 'e', 'ï': 'i', 'ö': 'o', 'ù': 'u', 'ŷ': 'i', 'ä': 'a', 'ê': 'e', 'í': 'i', 'ó': 'o', 'ü': 'u', 'ý': 'i', 'á': 'a', 'ë': 'e', 'ì': 'i', 'ò': 'o', 'ú': 'u', 'ỳ': 'i', 'ā': 'a', 'ē': 'e', 'ī': 'i', 'ō': 'o', 'ū': 'u', 'ȳ': 'i', 'ç': 'c', 'ñ': 'n', 'k': 'q', 'w': 'v', 'œ': 'oe', 'æ': 'ae', 'ſ': 's', 'ffi': 'ffi', 'ffl': 'ffl', 'ff': 'ff', 'ſt': 'ft', 'fi': 'fi', 'fl': 'fl', 'st': 'st', "⁰": "0", "¹": "1", "²": "2", "³": "3", "⁴": "4", "⁵": "5", "⁶": "6", "⁷": "7", "⁸": "8", "⁹": "9" }) def simplifyWord (sWord): "word simplication before calculating distance between words" sWord = sWord.lower().translate(_xTransCharsForSimplification) sNewWord = "" for i, c in enumerate(sWord, 1): if c == 'e' or c != sWord[i:i+1]: # exception for <e> to avoid confusion between crée / créai sNewWord += c return sNewWord.replace("eau", "o").replace("au", "o").replace("ai", "ẽ").replace("ei", "ẽ").replace("ph", "f") _xTransNumbersToExponent = str.maketrans({ "0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴", "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹" }) def numbersToExponent (sWord): return sWord.translate(_xTransNumbersToExponent) aVowel = set("aáàâäāeéèêëēiíìîïīoóòôöōuúùûüūyýỳŷÿȳœæAÁÀÂÄĀEÉÈÊËĒIÍÌÎÏĪOÓÒÔÖŌUÚÙÛÜŪYÝỲŶŸȲŒÆ") aConsonant = set("bcçdfghjklmnñpqrstvwxzBCÇDFGHJKLMNÑPQRSTVWXZ") aDouble = set("bcdfjklmnprstzBCDFJKLMNPRSTZ") # letters that may be used twice successively # Similar chars |
︙ | ︙ |
Modified graphspell/ibdawg.py from [bd7f8fa082] to [21e398dbec].
︙ | ︙ | |||
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 | aSugg = oSuggResult.getSuggestions(nSuggLimit) if sSfx or sPfx: # we add what we removed return list(map(lambda sSug: sPfx + sSug + sSfx, aSugg)) return aSugg def _splitSuggest (self, oSuggResult, sWord): for cSplitter in "'’": if cSplitter in sWord: sWord1, sWord2 = sWord.split(cSplitter, 1) if self.isValid(sWord1) and self.isValid(sWord2): oSuggResult.addSugg(sWord1+" "+sWord2) def _suggest (self, oSuggResult, sRemain, nMaxSwitch=0, nMaxDel=0, nMaxHardRepl=0, nMaxJump=0, nDist=0, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=False): # recursive function #logging.info((nDeep * " ") + sNewWord + ":" + sRemain) if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: if not sRemain: oSuggResult.addSugg(sNewWord, nDeep) for sTail in self._getTails(iAddr): oSuggResult.addSugg(sNewWord+sTail, nDeep) return | > > > > > > | | 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 | aSugg = oSuggResult.getSuggestions(nSuggLimit) if sSfx or sPfx: # we add what we removed return list(map(lambda sSug: sPfx + sSug + sSfx, aSugg)) return aSugg def _splitSuggest (self, oSuggResult, sWord): # split trailing numbers m = re.match(r"(\D+)([0-9]+)$", sWord) if m: print("ok") oSuggResult.addSugg(m.group(1) + " " + cp.numbersToExponent(m.group(2))) # split at apostrophes for cSplitter in "'’": if cSplitter in sWord: sWord1, sWord2 = sWord.split(cSplitter, 1) if self.isValid(sWord1) and self.isValid(sWord2): oSuggResult.addSugg(sWord1+" "+sWord2) def _suggest (self, oSuggResult, sRemain, nMaxSwitch=0, nMaxDel=0, nMaxHardRepl=0, nMaxJump=0, nDist=0, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=False): # recursive function #logging.info((nDeep * " ") + sNewWord + ":" + sRemain) if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: if not sRemain: oSuggResult.addSugg(sNewWord, nDeep) for sTail in self._getTails(iAddr): oSuggResult.addSugg(sNewWord+sTail, nDeep) return elif (len(sNewWord) + len(sRemain) == len(oSuggResult.sWord)) and oSuggResult.sWord.lower().startswith(sNewWord.lower()) and self.isValid(sRemain): oSuggResult.addSugg(sNewWord+" "+sRemain) if nDist > oSuggResult.nDistLimit: return cCurrent = sRemain[0:1] for cChar, jAddr in self._getCharArcs(iAddr): if cChar in cp.d1to1.get(cCurrent, cCurrent): self._suggest(oSuggResult, sRemain[1:], nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump, nDist, nDeep+1, jAddr, sNewWord+cChar) |
︙ | ︙ |
Modified misc/grammalecte.sublime-syntax from [751faa3559] to [15f97f9ddb].
︙ | ︙ | |||
46 47 48 49 50 51 52 | # other. - match: '\b(?:if|else|and|or|not|in)\b' scope: keyword.python - match: '\b(?:True|False|None)\b' scope: constant.language | | | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # other. - match: '\b(?:if|else|and|or|not|in)\b' scope: keyword.python - match: '\b(?:True|False|None)\b' scope: constant.language - match: '\b(?:spell|morph|morphVC|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define|define_from|select|exclude|analyse\w*|tag_\w+|apposition|is[A-Z]\w+|rewriteSubject|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b' scope: entity.name.function - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:upper|lower|digit|title))\b' scope: support.function - match: '\becho\b' scope: support.function.debug |
︙ | ︙ | |||
80 81 82 83 84 85 86 | - match: '/(\w+)/' scope: rule.actionoption captures: 1: rule.optionname # Definitions and options | | | | 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | - match: '/(\w+)/' scope: rule.actionoption captures: 1: rule.optionname # Definitions and options - match: '^OPT(?:GROUP|LANG|PRIORITY)/|^OPT(?:SOFTWARE|COLORTHEME):|^COLOR/' scope: options.command - match: '^OPT(?:LABEL|COLOR|)/' scope: options.parameter - match: '^DEF: ' scope: definition # Tests & TODO - match: '^TEST: (?:__[a-zA-Z0-9]+__ |)' |
︙ | ︙ | |||
107 108 109 110 111 112 113 | # rule delimiters - match: '<<-|>>>' scope: keyword.action - match: '__also__' scope: keyword.condition.green - match: '__else__' scope: keyword.condition.red | | | | | | | | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | # rule delimiters - match: '<<-|>>>' scope: keyword.action - match: '__also__' scope: keyword.condition.green - match: '__else__' scope: keyword.condition.red - match: '-(-?\d*\.?(?::\.?-?\d+|))(?::|)>>' scope: keyword.error captures: 1: keyword.error.group - match: '~(-?\d*(?::-?\d+|))>>' scope: keyword.textprocessor captures: 1: keyword.textprocessor.group - match: '=>>' scope: keyword.disambiguator - match: '/(-?\d*(?::-?\d+|))>>' scope: keyword.tag captures: 1: keyword.tag.group - match: '%(-?\d*(?::-?\d+|))>>' scope: keyword.tag captures: 1: keyword.tag.group # Tokens - match: '(>)[\w-]+' scope: string.lemma captures: 1: keyword.valid - match: '(~)(?!(?:\d+(?::\d+|)|)>>)[^\s¬]*' scope: string.regex captures: 1: keyword.valid - match: '(@)([^@\s¬]*)' scope: string.morph captures: 1: keyword.valid 2: string.morph.pattern - match: '(/)[\w-]+' scope: string.tag captures: 1: keyword.valid - match: '(?<=[^\w])([*][a-zA-Z0-9_]+)' scope: string.morph captures: 1: keyword.valid 2: string.meta - match: '(¬)(\S+)' scope: string.morph captures: 1: keyword.invalid 2: string.morph.antipattern - match: '<(?:start|end)>' scope: string.token - match: '<>' scope: string.jumptoken # Escaped chars - match: '\\(?:-?\d+|w|d|b|n|s|t)' scope: constant.character.escape # URL - match: '\| ?https?://[\w./%?&=#+-]+' scope: string.other # Example errors |
︙ | ︙ | |||
198 199 200 201 202 203 204 | # scope: constant.character.escape # - match: '(?:"|$)' # scope: punctuation.definition.string.end # pop: true line_comment: - meta_scope: comment.line | | | 198 199 200 201 202 203 204 205 206 207 208 209 210 | # scope: constant.character.escape # - match: '(?:"|$)' # scope: punctuation.definition.string.end # pop: true line_comment: - meta_scope: comment.line - match: '\\-?[0-9]+' scope: constant.character.escape - match: '\| ?https?://[\w./%?&=#+-]+' scope: string.other - match: $ pop: true |