0 votos
528 visualizações

Recebi este e-mail de um tradutor. Eu poderia escrever uma expressão regex básica, mas acredito que eu perderia alguns detalhes relacionados à pontuação possível no final de frases. Alguém pode ajudar?

Estou tentando fazer uma verificação final de pontuação que não faz parte das verificações padrão no Paratext. Especificamente, quero ter certeza de que não esquecemos nenhum ponto no final dos versículos. (Já encontrei alguns desses enquanto gravávamos.) Portanto, basicamente estou procurando por algum código REGEX que identifique lugares em que um versículo começa com uma letra maiúscula, mas o versículo anterior NÃO termina com um ponto. (Sei que isso pode identificar alguns falsos positivos, como quando um versículo começa com um substantivo próprio, mas pelo menos me dará uma lista mais curta para verificar do que checar todos os versículos. Se você puder escrever algum código REGEX para me ajudar, ficarei muito grato.)

Obrigado,

james_post

Tradução automática de English
Paratext por [Moderator]
(2,1k pontos)
| 528 visualizações

2 Respostas

+1 voto
Melhor resposta

Primeiro, alguns comentários, com elogios por ter escrito isso em dez minutos:

  • (?<=\p{L}) => É bom, mas proponho incluir “a letra” na captura real, para que o usuário veja onde o regex encontrou um possível “fim de frase”. Elogios por capturar letras maiúsculas e minúsculas. Então, substituo ?<= por ?: na minha proposta.

  • (?<!\\[\w+]) => Acredito que, para sua intenção de evitar falsos positivos com algum marcador, esta parte precisa estar à esquerda da sua “letra”. Além disso, o + deve estar fora dos colchetes, pois muitos marcadores têm múltiplos caracteres, como \s1.

  • E certos marcadores incluem o *, por exemplo, fim de algo como \em*. Lembro vagamente que certos marcadores podem ou devem incluir +. Se for esse o caso, você pode facilmente adicionar à lista de caracteres, como [\w*+].

  • \s*(?:\\\w+)?\s* => Este eu substituo por "pular qualquer número de marcadores potenciais e qualquer espaço em branco entre o final do versículo e o início do próximo versículo.

  • \\v [\d\w]+ \p{Lu} => Encontra um versículo seguido por uma letra maiúscula. Parece que você está confiante aqui sobre um “espaço clássico” entre \v e o número do versículo e após o número do versículo, então mantive essa sintaxe.

Gostaria de submeter um regex modificado, sem afirmar que é a solução final, apenas com a esperança de cobrir mais casos:

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

Aqui está a descrição do meu regex, conforme minha ferramenta:

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

Opções: Sem distinção entre maiúsculas e minúsculas; Espaçamento exato; Ponto corresponde a quebras de linha

  • Afirma que é impossível corresponder ao regex abaixo de trás para frente nesta posição (lookbehind negativo)
      • Corresponde ao caractere de barra invertida
      • Corresponde a um único caractere presente na lista abaixo
        • Entre zero e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
        • Um “caractere de palavra” (Unicode; qualquer letra ou ideograma, dígito, número de letra, pontuação de conector)
        • O caractere literal “*”
    • Corresponde à expressão regular abaixo
        • Corresponde a um caractere da categoria Unicode “letra” (qualquer tipo de letra de qualquer idioma)
      • Corresponde a um único caractere que é um “caractere de espaço em branco” (qualquer separador Unicode, tabulação, avanço de linha, retorno de carro, tabulação vertical, avanço de formulário, próxima linha, espaço de largura zero)
        • Entre zero e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
        • Corresponde à expressão regular abaixo
          • Entre zero e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
          • Corresponde ao caractere de barra invertida
          • Corresponde a um único caractere presente na lista abaixo
            • Entre um e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
            • Um “caractere de palavra” (Unicode; qualquer letra ou ideograma, dígito, número de letra, pontuação de conector)
            • O caractere literal “*”
          • Corresponde a um único caractere que é um “caractere de espaço em branco” (qualquer separador Unicode, tabulação, avanço de linha, retorno de carro, tabulação vertical, avanço de formulário, próxima linha, espaço de largura zero)
            • Entre um e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
          • Corresponde ao caractere de barra invertida
          • Corresponde à sequência de caracteres “v ” literalmente (sem distinção entre maiúsculas e minúsculas)
          • Corresponde a um único caractere presente na lista abaixo
            • Entre um e um número ilimitado de vezes, o máximo possível, devolvendo conforme necessário (ganancioso)
            • Um “dígito” (qualquer número decimal em qualquer script Unicode)
            • Um “caractere de palavra” (Unicode; qualquer letra ou ideograma, dígito, número de letra, pontuação de conector)
          • Corresponde ao caractere “ ” literalmente
          • Corresponde a um caractere da categoria Unicode “letra maiúscula” (uma letra maiúscula que tem uma variante minúscula)

          Criado com RegexBuddy

          E aqui está um texto de exemplo que usei para testes. Provavelmente incompleto (no final de cada exemplo, indico se é uma captura ou não):

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

          Então, foi divertido. Espero não estar muito longe. Infelizmente, nunca consigo lembrar qual sabor de regex o PT usa. Se houver problemas de sintaxe devido aos sabores, posso facilmente aplicar um diferente, como .NET ou Java, e executar minha ferramenta novamente.

          Novamente: Não a solução, mas talvez útil para iniciar um diálogo.

          hth

          Tradução automática de English
          por (934 pontos)
          reexibida
          0 votos

          O melhor que consegui em 10 minutos foi o seguinte:

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

          Não tenho certeza de quão precisa é (passou em todos os meus dados de teste, mas certamente não foram extensivos), então alguém provavelmente pode fazer melhor. :grin:

          Explicação breve da expressão:

          • (?<=\p{L}) => Verifica para trás se há uma letra (ou seja, o final do versículo anterior)
          • (?<!\\[\w+]) => Garante que a letra não faça parte de um marcador (lookbehind negativo)
          • \s*(?:\\\w+)?\s* => Pula qualquer marcador único e qualquer espaço em branco entre o final do versículo e o início do próximo versículo.
          • \\v [\d\w]+ \p{Lu} => Encontra um versículo seguido por uma letra maiúscula.
          Tradução automática de English
          por [Expert]
          (16,7k pontos)

          reexibida
          Temos o mesmo problema para o TkLy - Projeto de Tradução da Bíblia Toka-Ley. Como mencionado no parágrafo acima, "quero ter certeza de que não esquecemos nenhum ponto no final dos versículos."
          Copiei e coletei o código REGEX na janela de Pesquisa. O Paratext encontrou 73 itens. Mas, infelizmente, todos, exceto cinco, eram versículos seguidos por um Título de Seção ou em um Número de Capítulo. Quatro dos cinco casos excepcionais eram erros válidos que não tinham ponto.
          Existe uma maneira de modificar o REGEX para omitir versículos seguidos por Títulos de Seção?
          Obrigado,
          Mark
          Tradução automática de English

          Perguntas relacionadas

          0 votos
          2 respostas 296 visualizações
          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 perguntada Nov 29, 2017
          0 votos
          8 respostas 1,4k visualizações
          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 perguntada Ago 20, 2018
          0 votos
          1 resposta 243 visualizações
          Caros usuários do Paratext, Estamos trabalhando em um projeto e precisamos mudar o início do versículo de uma letra ... add it was\add* good. Obrigado e cumprimentos, Thiyagarajan
          Thiyagarajan 112 perguntada Ago 29, 2023
          0 votos
          1 resposta 229 visualizações
          Alguns projetos, após algum tempo, decidem que não desejam pontos ou outra pontuação final de frase no ... apropriado. Edição do Administrador: Formatação da publicação corrigida.
          [Expert]
          Jeff_Shrum
          2,9k
          perguntada Ago 29, 2022
          0 votos
          2 respostas 306 visualizações
          Quero pesquisar quantas vezes a KJV usou a palavra "and" no início de uma frase. Existe algum filtro para fazer isso?
          Waseem Raza 102 perguntada Jun 12, 2023
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          How good and pleasant it is when God’s people live together in unity!
          Psalm 133:1
          3,045 perguntas
          6,005 respostas
          5,671 comentários
          2,026 usuários