0 votos
527 vistas

Recibí este correo electrónico de un traductor. Podría escribir una expresión regular básica, pero creo que me perdería algunos detalles relacionados con la puntuación posible al final de una oración. ¿Alguien más podría ayudar?

Espero realizar una revisión final de puntuación que no forme parte de las comprobaciones estándar de Paratext. Específicamente, quiero asegurarme de no haber omitido puntos al final de los versículos. (He detectado algunos mientras grabábamos.) Básicamente, busco un código REGEX que identifique los lugares donde un versículo comienza con una letra mayúscula, pero el versículo anterior NO termina con un punto. (Sé que esto podría identificar algunos falsos positivos, como si un versículo comienza con un sustantivo propio, pero al menos me dará una lista más corta para revisar que revisar todos los versículos. Si puedes escribir algún código REGEX para ayudarme, lo agradecería enormemente.

Gracias,

james_post

Traducción automática desde English
Paratext por [Moderator]
(2,1k puntos)
| 527 vistas

2 Respuestas

+1 voto
Mejor respuesta

Primero, algunos comentarios, con elogios por escribir eso en diez minutos:

  • (?<=\p{L}) => Está bien, pero propongo incluir «la letra» en la captura real, para que el usuario vea dónde la expresión regular detectó un posible «final de oración». Elogios por capturar letras mayúsculas y minúsculas. Así que reemplazo ?<= con ?: en mi propuesta.

  • (?<!\\[\w+]) => Creo que, para tu intención de evitar falsos positivos con algún marcador, esta parte debe estar a la izquierda de tu «letra». Además, el + debería estar fuera de los corchetes, ya que muchos marcadores tienen múltiples caracteres, como \s1.

  • Y ciertos marcadores incluyen el *, por ejemplo, el final de algo como \em*. Recuerdo vagamente que ciertos marcadores pueden o incluso deben incluir +. Si ese es el caso, puedes agregar fácilmente a la lista de caracteres como [\w*+].

  • \s*(?:\\\w+)?\s* => Este lo reemplazo con «saltar cualquier número de marcadores potenciales y cualquier espacio en blanco entre el final del versículo y el inicio del siguiente versículo.

  • \\v [\d\w]+ \p{Lu} => Encontrar un versículo seguido de una letra mayúscula. Parece que estás seguro aquí de un «espacio clásico» entre \v y el número del versículo y después del número del versículo, así que mantuve esa sintaxis.

Me gustaría presentar una expresión regular modificada, sin afirmar que sea la solución final, solo con la esperanza de cubrir más casos:

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

Aquí está la descripción de mi expresión regular, según mi herramienta:

(?<!\\[\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}

Opciones: Sin distinción entre mayúsculas y minúsculas; Espaciado exacto; El punto coincide con los saltos de línea

  • Afirmar que es imposible que la expresión regular siguiente coincida hacia atrás en esta posición (mirada hacia atrás negativa)
      • Coindicir con el carácter de barra invertida
      • Coindicir con un solo carácter presente en la lista siguiente
        • Entre cero y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
        • Un «carácter de palabra» (Unicode; cualquier letra o ideograma, dígito, número de letra, puntuación conectora)
        • El carácter literal «*»
    • Coindicir con la expresión regular siguiente
        • Coindicir con un carácter de la categoría Unicode «letra» (cualquier tipo de letra de cualquier idioma)
      • Coindicir con un solo carácter que sea un «carácter de espacio en blanco» (cualquier separador Unicode, tabulación, salto de línea, retorno de carro, tabulación vertical, salto de página, siguiente línea, espacio de ancho cero)
        • Entre cero y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
        • Coindicir con la expresión regular siguiente
          • Entre cero y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
          • Coindicir con el carácter de barra invertida
          • Coindicir con un solo carácter presente en la lista siguiente
            • Entre uno y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
            • Un «carácter de palabra» (Unicode; cualquier letra o ideograma, dígito, número de letra, puntuación conectora)
            • El carácter literal «*»
          • Coindicir con un solo carácter que sea un «carácter de espacio en blanco» (cualquier separador Unicode, tabulación, salto de línea, retorno de carro, tabulación vertical, salto de página, siguiente línea, espacio de ancho cero)
            • Entre uno y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
          • Coindicir con el carácter de barra invertida
          • Coindicir con la cadena de caracteres «v » literalmente (sin distinción entre mayúsculas y minúsculas)
          • Coindicir con un solo carácter presente en la lista siguiente
            • Entre uno y un número ilimitado de veces, tantas veces como sea posible, devolviendo lo necesario (codicioso)
            • Un «dígito» (cualquier número decimal en cualquier escritura Unicode)
            • Un «carácter de palabra» (Unicode; cualquier letra o ideograma, dígito, número de letra, puntuación conectora)
          • Coindicir con el carácter « » literalmente
          • Coindicir con un carácter de la categoría Unicode «letra mayúscula» (una letra mayúscula que tiene una variante minúscula)

          Creado con RegexBuddy

          Y aquí hay un texto de muestra que usé para probar. Probablemente incompleto (al final de cada ejemplo, indico si es una coincidencia o no):

          \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]
          

          Así que, esto fue divertido. Espero no estar muy lejos. Lamentablemente, nunca puedo recordar qué variante de expresiones regulares usa PT. Si hay problemas con la sintaxis debido a las variantes, podría aplicar fácilmente una diferente, como .NET o Java, y volver a ejecutar mi herramienta.

          Otra vez: No la solución, pero quizás útil para iniciar un diálogo.

          hth

          Traducción automática desde English
          por (934 puntos)
          mostrada de nuevo
          0 votos

          Lo mejor que pude idear en 10 minutos fue lo siguiente:

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

          No estoy seguro de qué tan precisa es (pasó todos mis datos de prueba, pero ciertamente no fueron extensos), así que probablemente alguien pueda hacerlo mejor. :grin:

          Explicación breve de la expresión:

          • (?<=\p{L}) => Buscar hacia atrás una letra (es decir, el final del versículo anterior)
          • (?<!\\[\w+]) => Asegurarse de que la letra no forme parte de un marcador (mirada hacia atrás negativa)
          • \s*(?:\\\w+)?\s* => Saltar cualquier marcador único y cualquier espacio en blanco entre el final del versículo y el inicio del siguiente versículo.
          • \\v [\d\w]+ \p{Lu} => Encontrar un versículo seguido de una letra mayúscula.
          Traducción automática desde English
          por [Expert]
          (16,7k puntos)

          mostrada de nuevo
          Tenemos el mismo problema con TkLy - Proyecto de Traducción de la Biblia Toka-Ley. Como se señaló en el párrafo anterior, "quiero asegurarme de no haber omitido puntos al final de los versículos".
          Copié y pegué el código REGEX en la ventana Buscar. Paratext encontró 73 elementos. Pero, lamentablemente, todos menos cinco eran versículos seguidos de un Encabezado de Sección o en un Número de Capítulo. Cuatro de las cinco excepciones eran errores válidos que no tenían punto.
          ¿Hay una forma de modificar el REGEX para omitir los versículos seguidos de Encabezados de Sección?
          Gracias,
          Mark
          Traducción automática desde English

          Preguntas relacionadas

          0 votos
          2 respuestas 296 vistas
          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 preguntada nov 29, 2017
          0 votos
          8 respuestas 1,4k vistas
          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 preguntada ago 20, 2018
          0 votos
          1 respuesta 243 vistas
          Estimados usuarios de Paratext, Estamos trabajando en un proyecto y necesitamos cambiar el inicio del versículo de una letra ... it was\add* good. Gracias y saludos, Thiyagarajan
          Thiyagarajan 112 preguntada ago 29, 2023
          0 votos
          1 respuesta 229 vistas
          Algunos proyectos, tras un tiempo, deciden que no desean puntos u otra puntuación final de oración al final de sus ... del administrador: Se corrigió el formato de la publicación.
          [Expert]
          Jeff_Shrum
          2,9k
          preguntada ago 29, 2022
          0 votos
          2 respuestas 306 vistas
          Quiero buscar cuántas veces la KJV usó la palabra "and" al inicio de una oración. ¿Hay algún filtro para hacer eso?
          Waseem Raza 102 preguntada jun 12, 2023
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          I urge you, brothers and sisters, to watch out for those who cause divisions and put obstacles in your way that are contrary to the teaching you have learned. Keep away from them.
          Romans 16:17
          3,045 preguntas
          6,005 respuestas
          5,671 comentarios
          2,026 usuarios