0 suara
525 tampilan

Saya menerima email ini dari seorang penerjemah. Saya bisa menulis ekspresi regex yang sederhana, tetapi saya yakin saya akan melewatkan beberapa hal terkait tanda baca akhir kalimat yang mungkin ada. Bisakah seseorang membantu?

Saya berharap untuk melakukan pemeriksaan tanda baca akhir yang bukan bagian dari pemeriksaan standar di Paratext. Secara spesifik, saya ingin memastikan bahwa kami tidak meninggalkan titik di akhir ayat. (Saya sudah menemukan beberapa di antaranya saat kami merekam.) Jadi pada dasarnya saya mencari kode REGEX yang dapat mengidentifikasi tempat di mana sebuah ayat dimulai dengan huruf kapital tetapi ayat sebelumnya TIDAK diakhiri dengan titik. (Saya tahu ini mungkin mengidentifikasi beberapa positif palsu, misalnya jika sebuah ayat dimulai dengan kata benda khusus, tetapi setidaknya ini akan memberi saya daftar yang lebih pendek untuk diperiksa daripada memeriksa semua ayat. Jika Anda mampu menulis beberapa kode REGEX untuk membantu saya, saya akan sangat menghargainya.

Terima kasih,

james_post

Diterjemahkan secara otomatis dari English
Paratext oleh [Moderator]
(2,1k poin)
| 525 tampilan

2 Jawaban

+1 suara
Jawaban terbaik

Pertama, beberapa umpan balik, dengan pujian untuk menulisnya dalam sepuluh menit:

  • (?<=\p{L}) => Bagus, tetapi saya mengusulkan untuk menyertakan “huruf” dalam tangkapan aktual, sehingga pengguna akan melihat di mana regex menemukan “akhir kalimat” potensial. Pujian untuk menangkap huruf kapital dan huruf kecil. Jadi saya mengganti ?<= dengan ?: dalam usulan saya.

  • (?<!\\[\w+]) => Saya percaya untuk niat Anda menghindari positif palsu dengan beberapa penanda, bagian ini harus berada di sebelah kiri “huruf” Anda. Juga + harus berada di luar kurung siku karena banyak penanda memiliki beberapa karakter seperti \s1.

  • Dan penanda tertentu menyertakan *, misalnya akhir dari sesuatu seperti \em*. Saya samar-samar ingat bahwa penanda tertentu dapat atau bahkan harus menyertakan +. Jika itu kasusnya, Anda dapat dengan mudah menambahkan ke daftar karakter seperti [\w*+].

  • \s*(?:\\\w+)?\s* => Yang satu ini saya ganti dengan "lewati jumlah berapa pun penanda potensi dan spasi apa pun antara akhir ayat dan awal ayat berikutnya.

  • \\v [\d\w]+ \p{Lu} => Cari ayat yang diikuti oleh huruf kapital. Sepertinya Anda yakin di sini tentang “spasi klasik” antara \v dan nomor ayat dan setelah nomor ayat, jadi saya mempertahankan sintaksis itu.

Saya ingin mengajukan regex yang dimodifikasi, tidak mengklaim itu adalah solusi akhir, hanya berharap mencakup lebih banyak kasus:

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

Berikut adalah deskripsi untuk regex saya, sesuai dengan alat saya:

(?<!\\[\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: Case insensitive; Exact spacing; Dot matches line breaks

  • Assert that it is impossible to match the regex below backwards at this position (negative lookbehind)
      • Match the backslash character
      • Match a single character present in the list below
        • Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
        • A “word character” (Unicode; any letter or ideograph, digit, letter number, connector punctuation)
        • The literal character “*”
    • Match the regular expression below
        • Match a character from the Unicode category “letter” (any kind of letter from any language)
      • Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line, zero-width space)
        • Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
        • Match the regular expression below
          • Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
          • Match the backslash character
          • Match a single character present in the list below
            • Between one and unlimited times, as many times as possible, giving back as needed (greedy)
            • A “word character” (Unicode; any letter or ideograph, digit, letter number, connector punctuation)
            • The literal character “*”
          • Match a single character that is a “whitespace character” (any Unicode separator, tab, line feed, carriage return, vertical tab, form feed, next line, zero-width space)
            • Between one and unlimited times, as many times as possible, giving back as needed (greedy)
          • Match the backslash character
          • Match the character string “v ” literally (case insensitive)
          • Match a single character present in the list below
            • Between one and unlimited times, as many times as possible, giving back as needed (greedy)
            • A “digit” (any decimal number in any Unicode script)
            • A “word character” (Unicode; any letter or ideograph, digit, letter number, connector punctuation)
          • Match the character “ ” literally
          • Match a character from the Unicode category “uppercase letter” (an uppercase letter that has a lowercase variant)

          Created with RegexBuddy

          Dan di sini adalah beberapa teks sampel, yang saya gunakan untuk pengujian. Kemungkinan tidak lengkap (di akhir setiap contoh, saya menandai, apakah itu tangkapan atau tidak):

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

          Jadi, ini menyenangkan. Semoga saya tidak terlalu jauh. Sayangnya saya tidak pernah ingat apa flavor regex yang digunakan PT. Jika ada masalah dengan sintaksis karena flavor, saya bisa dengan mudah menerapkan yang lain seperti .NET atau Java dan menjalankan ulang alat saya.

          Lagi: Bukan solusinya tetapi mungkin berguna untuk memulai dialog.

          hth

          Diterjemahkan secara otomatis dari English
          oleh (934 poin)
          ditampilkan kembali
          0 suara

          Yang terbaik yang bisa saya kumpulkan dalam 10 menit adalah sebagai berikut:

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

          Saya tidak yakin seberapa akurat ini (lulus semua data pengujian saya, tetapi tentu saja tidak luas) jadi seseorang mungkin bisa melakukannya lebih baik. :grin:

          Penjelasan singkat tentang ekspresi:

          • (?<=\p{L}) => Lihat ke belakang untuk mencari huruf (yaitu akhir ayat sebelumnya)
          • (?<!\\[\w+]) => Pastikan huruf tersebut bukan bagian dari penanda (negative look behind)
          • \s*(?:\\\w+)?\s* => Lewati satu penanda apa pun dan spasi apa pun antara akhir ayat dan awal ayat berikutnya.
          • \\v [\d\w]+ \p{Lu} => Cari ayat yang diikuti oleh huruf kapital.
          Diterjemahkan secara otomatis dari English
          oleh [Expert]
          (16,7k poin)

          ditampilkan kembali
          Kami memiliki masalah yang sama untuk TkLy - Proyek Penerjemahan Alkitab Toka-Ley. Seperti yang dicatat di paragraf di atas, "Saya ingin memastikan bahwa kami tidak meninggalkan titik di akhir ayat."
          Saya menyalin dan menempelkan kode REGEX ke jendela Find. Paratext menemukan 73 item. Tetapi sayangnya, semua kecuali lima adalah ayat yang diikuti oleh Judul Bagian atau pada Nomor Bab. Empat dari lima pengecualian adalah kesalahan valid yang tidak memiliki titik.
          Apakah ada cara untuk memodifikasi REGEX untuk mengabaikan ayat yang diikuti oleh Judul Bagian?
          Terima kasih,
          Mark
          Diterjemahkan secara otomatis dari English

          Pertanyaan terkait

          0 suara
          2 jawaban 296 tampilan
          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 bertanya Nov 29, 2017
          0 suara
          8 jawaban 1,4k tampilan
          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 bertanya Agu 20, 2018
          0 suara
          1 jawaban 243 tampilan
          Selamat datang pengguna Paratext, Kami sedang mengerjakan sebuah proyek dan perlu mengubah awal ayat dari huruf kecil ... \add* good. Terima kasih atas perhatiannya, Thiyagarajan
          Thiyagarajan 112 bertanya Agu 29, 2023
          0 suara
          1 jawaban 229 tampilan
          Beberapa proyek setelah beberapa waktu memutuskan bahwa mereka tidak ingin ada titik atau tanda baca akhir kalimat lainnya ... kebutuhan. Admin Edit: Fixed formatting of post.
          [Expert]
          Jeff_Shrum
          2,9k
          bertanya Agu 29, 2022
          0 suara
          2 jawaban 306 tampilan
          Saya ingin mencari berapa kali KJV menggunakan kata "and" di awal kalimat. Apakah ada filter untuk melakukan itu?
          Waseem Raza 102 bertanya Jun 12, 2023
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          Dear friends, since God so loved us, we also ought to love one another.
          1 John 4:11
          3,045 pertanyaan
          6,005 jawaban
          5,671 komentar
          2,026 pengguna