0 votes
525 vues

J'ai reçu cet e-mail d'un traducteur. Je pourrais écrire une expression regex élémentaire, mais je crois que je passerais à côté de certains éléments avec une ponctuation possible en fin de phrase. Quelqu'un d'autre peut-il aider ?

J'espère effectuer une vérification finale de la ponctuation qui ne fait pas partie des vérifications standard dans Paratext. Plus précisément, je veux m'assurer que nous n'avons pas oublié de points en fin de versets. (J'en ai repéré quelques-uns pendant que nous enregistrions.) Je cherche donc essentiellement du code REGEX qui permettrait d'identifier les endroits où un verset commence par une majuscule mais où le verset précédent ne se termine PAS par un point. (Je sais que cela pourrait identifier de faux positifs, comme si un verset commençait par un nom propre, mais cela me donnera au moins une liste plus courte à vérifier que de vérifier tous les versets. Si vous êtes capable d'écrire du code REGEX pour m'aider, je vous en serais très reconnaissant.)

Merci,

james_post

Traduit automatiquement depuis English
Paratext par [Moderator]
(2,1k points)
| 525 vues

2 Réponses

+1 vote
Meilleure réponse

D'abord quelques retours, avec des compliments pour avoir écrit cela en dix minutes :

  • (?<=\p{L}) => C'est bien, mais je propose d'inclure « la lettre » dans la capture réelle, afin que l'utilisateur puisse voir où la regex a repéré une « fin de phrase » potentielle. Compliments pour avoir capté les majuscules et les minuscules. Je remplace donc ?<= par ?: dans ma proposition.

  • (?<!\\[\w+]) => Je crois que pour votre intention d'éviter les faux positifs avec certains marqueurs, cette partie doit être à gauche de votre « lettre ». De plus, le + devrait être à l'extérieur des crochets, car de nombreux marqueurs ont plusieurs caractères comme \s1.

  • Et certains marqueurs incluent le *, par exemple la fin de quelque chose comme \em*. Je me souviens vaguement que certains marqueurs peuvent ou doivent même inclure +. Si c'est le cas, vous pouvez facilement ajouter à la liste des caractères comme [\w*+].

  • \s*(?:\\\w+)?\s* => Je remplace celui-ci par « passer par-dessus n'importe quel nombre de marqueurs potentiels et tout espace blanc entre la fin du verset et le début du verset suivant.

  • \\v [\d\w]+ \p{Lu} => Trouver un verset suivi d'une majuscule. Il semble que vous soyez confiant ici quant à un « espace classique » entre \v et le numéro du verset et après le numéro du verset, donc j'ai conservé cette syntaxe.

Je voudrais soumettre une regex modifiée, sans prétendre que c'est la solution finale, mais en espérant couvrir plus de cas :

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

Voici la description de ma regex, selon mon outil :

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

Options : Insensible à la casse ; Espacement exact ; Le point correspond aux sauts de ligne

  • Affirmer qu'il est impossible de correspondre à la regex ci-dessous en arrière à cette position (regard en arrière négatif)
      • Correspondre au caractère backslash
      • Correspondre à un seul caractère présent dans la liste ci-dessous
        • Entre zéro et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
        • Un « caractère de mot » (Unicode ; toute lettre ou idéogramme, chiffre, chiffre de lettre, ponctuation de liaison)
        • Le caractère littéral « * »
    • Correspondre à l'expression régulière ci-dessous
        • Correspondre à un caractère de la catégorie Unicode « lettre » (toute sorte de lettre de n'importe quelle langue)
      • Correspondre à un seul caractère qui est un « caractère d'espace blanc » (tout séparateur Unicode, tabulation, saut de ligne, retour chariot, tabulation verticale, saut de page, ligne suivante, espace de largeur nulle)
        • Entre zéro et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
        • Correspondre à l'expression régulière ci-dessous
          • Entre zéro et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
          • Correspondre au caractère backslash
          • Correspondre à un seul caractère présent dans la liste ci-dessous
            • Entre un et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
            • Un « caractère de mot » (Unicode ; toute lettre ou idéogramme, chiffre, chiffre de lettre, ponctuation de liaison)
            • Le caractère littéral « * »
          • Correspondre à un seul caractère qui est un « caractère d'espace blanc » (tout séparateur Unicode, tabulation, saut de ligne, retour chariot, tabulation verticale, saut de page, ligne suivante, espace de largeur nulle)
            • Entre un et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
          • Correspondre au caractère backslash
          • Correspondre à la chaîne de caractères « v » littéralement (insensible à la casse)
          • Correspondre à un seul caractère présent dans la liste ci-dessous
            • Entre un et un nombre illimité de fois, autant de fois que possible, en rendant ce qui est nécessaire (avide)
            • Un « chiffre » (tout nombre décimal dans n'importe quel script Unicode)
            • Un « caractère de mot » (Unicode ; toute lettre ou idéogramme, chiffre, chiffre de lettre, ponctuation de liaison)
          • Correspondre au caractère « » littéralement
          • Correspondre à un caractère de la catégorie Unicode « majuscule » (une majuscule qui a une variante minuscule)

          Créé avec RegexBuddy

          Et voici un texte d'exemple que j'ai utilisé pour les tests. Probablement incomplet (à la fin de chaque exemple, je marque s'il s'agit d'une capture ou non) :

          \v 8 Some text without \em punctuation\em* \rem \any \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text without \em punctuation\em*  \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text without punctuation \v 9a A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text with proper \em punctuation.\em* \just \one \more \v 9 A new verse which is a new sentence, starting with a capital.  [punctuation present, so no catch]
          
          \v 8 Some text ending an an all-cap word like \em LORD\em* \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 10 A long sentence \whatever \v 11a  over two verses or more.  [No punctuation needed, so no catch]
          

          Bon, c'était amusant. J'espère ne pas être trop loin. Je ne peux malheureusement jamais me souvenir de quelle saveur de regex PT utilise. S'il y a des problèmes de syntaxe à cause des saveurs, je pourrais facilement en appliquer une différente comme .NET ou Java et relancer mon outil.

          Encore une fois : Ce n'est pas la solution, mais peut-être utile pour lancer un dialogue.

          hth

          Traduit automatiquement depuis English
          par (934 points)
          réaffiché
          0 votes

          Le mieux que j'ai pu trouver en 10 minutes est le suivant :

          (?<=\p{L})(?<!\\[\w+])\s*(?:\\\w+)?\s*\\v [\d\w]+ \p{Lu}
          

          Je ne suis pas sûr de sa précision (il a passé tous mes jeux de données de test, mais ce n'était certainement pas exhaustif), donc quelqu'un peut probablement faire mieux. :grin:

          Brève explication de l'expression :

          • (?<=\p{L}) => Regarder en arrière pour une lettre (c'est-à-dire la fin du verset précédent)
          • (?<!\\[\w+]) => S'assurer que la lettre ne fait pas partie d'un marqueur (regard en arrière négatif)
          • \s*(?:\\\w+)?\s* => Passer par-dessus un marqueur unique et tout espace blanc entre la fin du verset et le début du verset suivant.
          • \\v [\d\w]+ \p{Lu} => Trouver un verset suivi d'une majuscule.
          Traduit automatiquement depuis English
          par [Expert]
          (16,7k points)

          réaffiché
          Nous avons le même problème pour TkLy - le projet de traduction de la Bible Toka-Ley. Comme indiqué dans le paragraphe ci-dessus, « Je veux m'assurer que nous n'avons pas oublié de points en fin de versets. »
          J'ai copié et collé le code REGEX dans la fenêtre Rechercher. Paratext a trouvé 73 éléments. Mais malheureusement, tous sauf cinq étaient des versets suivis d'un Titre de Section ou d'un Numéro de Chapitre. Quatre des cinq exceptions étaient des erreurs valides sans point.
          Y a-t-il un moyen de modifier le REGEX pour omettre les versets suivis de Titres de Section ?
          Merci,
          Mark
          Traduit automatiquement depuis English

          Questions connexes

          0 votes
          2 réponses 296 vues
          We have several languages in our area that do not normally use punctuation to mark end of sentence. They mark end of ... a lot of Punctuation missing at end of Paragraph . Thanks
          MSEAIT_LT 478 posée nov. 29, 2017
          0 votes
          8 réponses 1,4k vues
          We have a user who has inserted a lot of \pn and some \nd inside of footnotes. We now know we need those to be ... the search to inside of a single footnote? Thank you, MSEAIT/LT
          MSEAIT_LT 478 posée août 20, 2018
          0 votes
          1 réponse 243 vues
          Chers utilisateurs de Paratext, Nous travaillons sur un projet et devons changer le début du verset d'une minuscule à ... add it was\add* good. Merci et cordialement, Thiyagarajan
          Thiyagarajan 112 posée août 29, 2023
          0 votes
          1 réponse 229 vues
          Certains projets décident, après un certain temps, qu'ils ne souhaitent pas de points ou d'autres signes de fin de ... l'administrateur : Correction de la mise en forme du message.
          [Expert]
          Jeff_Shrum
          2,9k
          posée août 29, 2022
          0 votes
          2 réponses 306 vues
          Je souhaite rechercher combien de fois la KJV utilise le mot « and » au début d'une phrase. Existe-t-il un filtre pour le faire ?
          Waseem Raza 102 posée juin 12, 2023
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          May the God who gives endurance and encouragement give you the same attitude of mind toward each other that Christ Jesus had.
          Romans 15:5
          3,045 questions
          6,005 réponses
          5,671 commentaires
          2,026 utilisateurs