Grammalecte  Check-in [119552d3ae]

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

Overview
Comment:[fr][core] découpage des phrases
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core
Files: files | file ages | folders
SHA3-256:119552d3ae74a7df9261dd8f412f178db64e9865a899280c171c96c2990d7c9a
User & Date: olr 2019-04-11 21:00:34
Context
2019-04-12
05:42
[fr] écriture épicène: màj avec puce +option idoine check-in: 324ab931ac user: olr tags: fr, trunk
2019-04-11
21:00
[fr][core] découpage des phrases check-in: 119552d3ae user: olr tags: core, fr, trunk
2019-04-09
13:39
[fr] màj: métagraphe, màj: dictionnaire check-in: bf49a78851 user: olr tags: fr, trunk
Changes

Changes to gc_core/js/lang_core/gc_engine.js.

161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
    //// Parsing

    parse: function (sText, sCountry="${country_default}", bDebug=false, dOptions=null, bContext=false) {
        let oText = new TextParser(sText);
        return oText.parse(sCountry, bDebug, dOptions, bContext);
    },

    _zEndOfSentence: new RegExp ('([.?!:;…][   .?!… »”")]+|.$)', "g"),
    _zBeginOfParagraph: new RegExp ("^[-  –—.,;?!…]*", "ig"),
    _zEndOfParagraph: new RegExp ("[-  .,;?!…–—]*$", "ig"),

    getSentenceBoundaries: function* (sText) {
        let mBeginOfSentence = this._zBeginOfParagraph.exec(sText);
        let iStart = this._zBeginOfParagraph.lastIndex;
        let m;







|







161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
    //// Parsing

    parse: function (sText, sCountry="${country_default}", bDebug=false, dOptions=null, bContext=false) {
        let oText = new TextParser(sText);
        return oText.parse(sCountry, bDebug, dOptions, bContext);
    },

    _zEndOfSentence: new RegExp ('([.?!:;…][   .?!…»”")]+(?=[A-ZÉÈÎÔ])|.$)', "g"),
    _zBeginOfParagraph: new RegExp ("^[-  –—.,;?!…]*", "ig"),
    _zEndOfParagraph: new RegExp ("[-  .,;?!…–—]*$", "ig"),

    getSentenceBoundaries: function* (sText) {
        let mBeginOfSentence = this._zBeginOfParagraph.exec(sText);
        let iStart = this._zBeginOfParagraph.lastIndex;
        let m;

Changes to gc_core/py/lang_core/gc_engine.py.

187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
    "set options to default values"
    global _dOptions
    _dOptions = dict(gc_options.getOptions(_sAppContext))


#### Parsing

_zEndOfSentence = re.compile(r'([.?!:;…][   .?!… »”")]+|.$)')
_zBeginOfParagraph = re.compile(r"^\W*")
_zEndOfParagraph = re.compile(r"\W*$")

def _getSentenceBoundaries (sText):
    iStart = _zBeginOfParagraph.match(sText).end()
    for m in _zEndOfSentence.finditer(sText):
        yield (iStart, m.end())







|







187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
    "set options to default values"
    global _dOptions
    _dOptions = dict(gc_options.getOptions(_sAppContext))


#### Parsing

_zEndOfSentence = re.compile(r'([.?!:;…][   .?!…»”"’)]+(?=[A-ZÉÈÎÔ])|.$)')
_zBeginOfParagraph = re.compile(r"^\W*")
_zEndOfParagraph = re.compile(r"\W*$")

def _getSentenceBoundaries (sText):
    iStart = _zBeginOfParagraph.match(sText).end()
    for m in _zEndOfSentence.finditer(sText):
        yield (iStart, m.end())

Changes to gc_lang/fr/rules.grx.

489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
....
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
....
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
....
2221
2222
2223
2224
2225
2226
2227








2228
2229
2230
2231
2232
2233
2234
....
8490
8491
8492
8493
8494
8495
8496










8497
8498
8499
8500
8501
8502
8503
.....
11780
11781
11782
11783
11784
11785
11786
11787
11788
11789
11790
11791
11792
11793
11794
11795
.....
15402
15403
15404
15405
15406
15407
15408

15409
15410
15411
15412
15413
15414
15415
    <<- \0.__len__() == 4 ->> =\0.replace(".", "").upper() + "|" + \0[0:2] + " " + \0[2:4]
    # Sigle. Il est recommandé d’ôter les points pour les sigles. (S’il s’agit d’un prénom et d’un nom, mettez un espace.)|https://fr.wikipedia.org/wiki/Sigle#Typographie
    <<- __else__ ->> =\0.replace(".", "").upper()                                                   # Sigle. Il est recommandé d’ôter les points pour les sigles.|https://fr.wikipedia.org/wiki/Sigle#Typographie
    <<- \0 != "b.a." ~>> =\0.replace(".", "_")
__[s>(p_sigle3)__
    J[.]-[A-Z][.] <<- ~>> =\0.replace(".", "").replace("-","")

# Ne pas scinder la phrase si les points de suspension sont suivis d’une minuscule
__<s>(p_points_suspension)__
    ({w1})(…)(?= [a-zéèêàâîô])  @@0,$ <<- not re.search("(?i)^etc", \1) ~2>> ,

# Mr et MM
__[s>(p_M_point)__
    (M[.]) (?:[A-ZÉÈÎ]\w*|l[e'’])  @@0 <<- ~1>> Mr
__[s>(p_MM_point)__
    MM[.] <<- ~>> "MM "
__[s>(p_Mr_Mgr_Mme_point)__
    M(?:r|gr|me) [A-ZÉ]([.])(?=\W+[a-zéèêâîïû]) @@$ <<- ~1>> *
................................................................................
    <<- not morph(word(1), ";S") and not morph(word(-1), ":R") ->> " !"                             # Erreur de numérisation ?

TEST: __ocr__ Oh{{ I}} c’est pas formidable ?
TEST: __ocr__ Vraiment{{ 1}} Paul n’en savait rien.
TEST: __ocr__ Ça prendra 1 h.
TEST: __ocr__ Valeur : 1 KHz.


# virgules
__[s>/ocr(ocr_virgules)__
    (?:[iI]l|l(?:es?|a)|[dnmtsDNMTS]e|[àÀ]|[cC]e(?:te|t|)|[mM](?:on|a)|[TS]a|[qQ]uelques?|[aA]ux?),
    <<- not /0.endswith("…") ->> =\0[:-1]                                                           # Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# Nombres
__[i]/ocr(ocr_nombres)__
    [\dOI][\dOI]+
        <<- \0 == "II" ->> 11|Il                                                                    # Erreur de numérisation ?
        <<- __else__ and not \0.isdigit() ->> =\0.replace("O", "0").replace("I", "1")               # Erreur de numérisation ?

................................................................................
!!!

# Trait d’union conditionnel (u00AD)
__[i](p_trait_union_conditionnel1)__    \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "")
__[i](p_trait_union_conditionnel2)__    \w+‑\w+ <<- ~>> =\0.replace("‑", "")

# empêcher la scission en fin de dialogue
__<s>(p_fin_dialogue1)__    ([?!…][?!…  ]*)[ "'”» ]*,  @@0 <<- ~1>> *
__<s>(p_fin_dialogue2)__    ([?!…][?!…  ]*)[ "'”» ]*[a-zéèêîô]  @@0 <<- ~1>> ,

TEST: « Je suis donc perdu ? », dit Paul.
TEST: “C’est bon !”, croit savoir Marie.
TEST: “Parce que… ?” finit par demander Paul.
TEST: « Dans quel pays sommes-nous ? » demanda un manifestant.


................................................................................
@@@@
@@@@
@@@@
@@@@

# This graph is parsed only if option <ocr> is activated.










# âge / age
__ocr_age__
    >age
        <<- ->> =\1.replace("a", "â").replace("A", "Â")                                             # Erreur de numérisation ?

TEST: __ocr__ À son {{age}}, on ne sait plus ce qu’on fait.
................................................................................
# 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
................................................................................
#


!!!! Redondances dans la phrase                                                                   !!

__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
        <<- not morph(\1, ":(?:G|V0)|>même/") -2>> _                    # Dans cette phrase, répétition de « \1 » (à gauche).
        <<- __also__ -1>> _                                             # Dans cette phrase, répétition de « \1 » (à droite).

TEST: __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
TEST: __redon2__ ils sont là côte à côte.
TEST: __redon2__ Tu avances petit à petit, et tu réussis.
TEST: __redon2__ De loin en loin, elle passe.
TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)

................................................................................
TEST: en tâche de fond
TEST: la tâche de la justice
TEST: c’est une tâche de grande envergure
TEST: déléguer des tâches de sécurité publique à des machines autonomes
TEST: tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée
TEST: Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillance, notamment au sein de la nouvelle brigade anti-insécurité.
TEST: une tâche de sélection des données



__conf_tâche_tache__
    tache [accomplie|dévalorisante|difforme|épuisante|exécutée|exténuante|fatigante|ingrate|menée|valorisante]
    taches [accomplies|dévalorisantes|difformes|épuisantes|exécutées|exténuantes|fatigantes|ingrates|menées|valorisantes]
    >tache >insoluble
    >tache consistant à







<
<
<
<







 







<
<
<
<
<
<
<
<
<







 







|
<







 







>
>
>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>
>







 







|
|







 







>







489
490
491
492
493
494
495




496
497
498
499
500
501
502
....
1304
1305
1306
1307
1308
1309
1310









1311
1312
1313
1314
1315
1316
1317
....
1423
1424
1425
1426
1427
1428
1429
1430

1431
1432
1433
1434
1435
1436
1437
....
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
....
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
.....
11784
11785
11786
11787
11788
11789
11790
11791
11792
11793
11794
11795
11796
11797
11798
11799
.....
15406
15407
15408
15409
15410
15411
15412
15413
15414
15415
15416
15417
15418
15419
15420
    <<- \0.__len__() == 4 ->> =\0.replace(".", "").upper() + "|" + \0[0:2] + " " + \0[2:4]
    # Sigle. Il est recommandé d’ôter les points pour les sigles. (S’il s’agit d’un prénom et d’un nom, mettez un espace.)|https://fr.wikipedia.org/wiki/Sigle#Typographie
    <<- __else__ ->> =\0.replace(".", "").upper()                                                   # Sigle. Il est recommandé d’ôter les points pour les sigles.|https://fr.wikipedia.org/wiki/Sigle#Typographie
    <<- \0 != "b.a." ~>> =\0.replace(".", "_")
__[s>(p_sigle3)__
    J[.]-[A-Z][.] <<- ~>> =\0.replace(".", "").replace("-","")





# Mr et MM
__[s>(p_M_point)__
    (M[.]) (?:[A-ZÉÈÎ]\w*|l[e'’])  @@0 <<- ~1>> Mr
__[s>(p_MM_point)__
    MM[.] <<- ~>> "MM "
__[s>(p_Mr_Mgr_Mme_point)__
    M(?:r|gr|me) [A-ZÉ]([.])(?=\W+[a-zéèêâîïû]) @@$ <<- ~1>> *
................................................................................
    <<- not morph(word(1), ";S") and not morph(word(-1), ":R") ->> " !"                             # Erreur de numérisation ?

TEST: __ocr__ Oh{{ I}} c’est pas formidable ?
TEST: __ocr__ Vraiment{{ 1}} Paul n’en savait rien.
TEST: __ocr__ Ça prendra 1 h.
TEST: __ocr__ Valeur : 1 KHz.











# Nombres
__[i]/ocr(ocr_nombres)__
    [\dOI][\dOI]+
        <<- \0 == "II" ->> 11|Il                                                                    # Erreur de numérisation ?
        <<- __else__ and not \0.isdigit() ->> =\0.replace("O", "0").replace("I", "1")               # Erreur de numérisation ?

................................................................................
!!!

# Trait d’union conditionnel (u00AD)
__[i](p_trait_union_conditionnel1)__    \w+‑\w+‑\w+ <<- ~>> =\0.replace("‑", "")
__[i](p_trait_union_conditionnel2)__    \w+‑\w+ <<- ~>> =\0.replace("‑", "")

# empêcher la scission en fin de dialogue
__<s>(p_fin_dialogue)__    ([?!…][?!…  ]*)[ "'”» ]*,  @@0 <<- ~1>> *


TEST: « Je suis donc perdu ? », dit Paul.
TEST: “C’est bon !”, croit savoir Marie.
TEST: “Parce que… ?” finit par demander Paul.
TEST: « Dans quel pays sommes-nous ? » demanda un manifestant.


................................................................................
@@@@
@@@@
@@@@
@@@@

# This graph is parsed only if option <ocr> is activated.

# virgules
__ocr_virgules__
    [il|le|la|l’|les|de|d’|ne|n’|me|m’|te|t’|se|s’|à|ce|cet|cette|mon|ma|ta|sa|mes|tes|ses|nos|vos|quelque|quelques|au|aux] ,
        <<- /ocr/ space_after(\1, 0, 0) and not \1.isupper() or value(\1, "|à|") ->> \1             # Erreur de numérisation ? Virgule superflue ?

TEST: __ocr__ Pierre entre pour {{se,}} rapprocher de L
TEST: __ocr__ je voudrais faire une question ou deux sur une maison de ce village, la… comment l’appelle-t-on ?


# âge / age
__ocr_age__
    >age
        <<- ->> =\1.replace("a", "â").replace("A", "Â")                                             # Erreur de numérisation ?

TEST: __ocr__ À son {{age}}, on ne sait plus ce qu’on fait.
................................................................................
# 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.


# entre autres
__sgpl_entre_autres__
    entre autre ,
    entre autre @:(?:[GW]|[NA].*:[pi])
        <<- /sgpl/ -2>> autres                                      # La locution “entre autres”, toujours au pluriel.|https://fr.wiktionary.org/wiki/entre_autres

TEST: Des raisons ? Entre {{autre}} je n’en savais pas plus que lui.
TEST: il y eut, entre {{autre}}, des erreurs commises.


# 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
................................................................................
#


!!!! Redondances dans la phrase                                                                   !!

__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
        <<- not morph(\1, ":(?:G|V0)|>même/") -2>> _                                                # Dans cette phrase, répétition de “\1” (à gauche).
        <<- __also__ -1>> _                                                                         # Dans cette phrase, répétition de “\1” (à droite).

TEST: __redon2__ Quelle {{imposture}}, c’est d’un ennui, c’est une {{imposture}}.
TEST: __redon2__ ils sont là côte à côte.
TEST: __redon2__ Tu avances petit à petit, et tu réussis.
TEST: __redon2__ De loin en loin, elle passe.
TEST: __redon2__ Les mêmes causes produisent/produisant les mêmes effets. (répétition)

................................................................................
TEST: en tâche de fond
TEST: la tâche de la justice
TEST: c’est une tâche de grande envergure
TEST: déléguer des tâches de sécurité publique à des machines autonomes
TEST: tirer bénéfice de nouvelles données en fonction de la tâche de départ qui leur a été assignée
TEST: Les « pervenches » fonctionnaires seraient alors affectées à d’autres tâches de surveillance, notamment au sein de la nouvelle brigade anti-insécurité.
TEST: une tâche de sélection des données
TEST: les agents peu nombreux sont accaparés par le court terme et les tâches de gestion


__conf_tâche_tache__
    tache [accomplie|dévalorisante|difforme|épuisante|exécutée|exténuante|fatigante|ingrate|menée|valorisante]
    taches [accomplies|dévalorisantes|difformes|épuisantes|exécutées|exténuantes|fatigantes|ingrates|menées|valorisantes]
    >tache >insoluble
    >tache consistant à