0
526 次瀏覽

我收到一位譯者的這封電子郵件。我雖然能寫出基礎的正則表達式,但認為我可能會遺漏一些可能作為句子結尾的標點符號。請問有沒有人能幫忙?

我希望進行一次最終標點檢查,這不在 Paratext 的標準檢查範圍內。具體來說,我想確保我們沒有在節(verse)的結尾遺漏任何句號。(我們在錄音過程中已經發現了幾處。)所以,我基本上是在尋找一段 REGEX 代碼,用來識別那些以大寫字母開頭,但前一節並未以句號結尾的地方。(我知道這可能會識別出一些誤報,例如當一節以專有名詞開頭時,但至少能給我一份比檢查所有節更短的清單。如果你能寫出一些 REGEX 代碼來幫助我,我將非常感激。)

謝謝,

james_post

機器翻譯自 English
Paratext [Moderator]
(2.1k 點) 提出
| 526 次瀏覽

2 個回答

+1
最佳回答

首先是一些反饋,並對你在十分鐘內寫出這段代碼表示讚賞:

  • (?<=\p{L}) => 這部分很好,但我建議將「字母」包含在實際的捕獲組中,這樣用戶就能看到正則表達式在哪裡發現了潛在的「句尾」。讚賞你同時考慮了大寫和小寫字母。因此,在我的建議中,我將 ?<= 替換為 ?:

  • (?<!\\[\w+]) => 我認為為了避免某些標記造成的誤報,這部分必須位於你的「字母」左側。此外,+ 應該放在方括號外,因為許多標記包含多個字符,例如 \s1

  • 某些標記包含 *,例如表示某事物結束的 \em*。我模糊地記得某些標記可以甚至必須包含 +。如果是這樣,你可以輕鬆地在字符列表中添加這些字符,例如 [\w*+]。

  • \s*(?:\\\w+)?\s* => 我將這部分替換為「跳過節結尾與下一節開頭之間任意數量潛在標記和空白字符」。

  • \\v [\d\w]+ \p{Lu} => 尋找一個節,其後緊跟一個大寫字母。看來你對 \v 與節號之間以及節號之後的「標準空格」很有信心,所以我保留了該語法。

我想提交一個修改後的正則表達式,不聲稱這是最終解決方案,只是希望能涵蓋更多情況:

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

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

選項:不區分大小寫;精確間距;點號匹配換行符

  • 斷言在此位置反向匹配下方的正則表達式是不可能的(負向前瞻/negative lookbehind)
      • 匹配反斜杠字符
      • 匹配下列列表中存在的單個字符
        • 零次到無限次,盡可能多地匹配,必要時回溯(貪婪)
        • 一個「單詞字符」(Unicode;任何字母或表意文字、數字、字母數字、連接符號)
        • 字面字符 “*”
    • 匹配下方的正則表達式
        • 匹配 Unicode 類別「字母」中的字符(任何語言的任何類型的字母)
      • 匹配單個「空白字符」(任何 Unicode 分隔符、製表符、換行符、回車符、垂直製表符、換頁符、下一行、零寬空格)
        • 零次到無限次,盡可能多地匹配,必要時回溯(貪婪)
        • 匹配下方的正則表達式
          • 零次到無限次,盡可能多地匹配,必要時回溯(貪婪)
          • 匹配反斜杠字符
          • 匹配下列列表中存在的單個字符
            • 一次到無限次,盡可能多地匹配,必要時回溯(貪婪)
            • 一個「單詞字符」(Unicode;任何字母或表意文字、數字、字母數字、連接符號)
            • 字面字符 “*”
          • 匹配單個「空白字符」(任何 Unicode 分隔符、製表符、換行符、回車符、垂直製表符、換頁符、下一行、零寬空格)
            • 一次到無限次,盡可能多地匹配,必要時回溯(貪婪)
          • 匹配反斜杠字符
          • 字面匹配字符字符串 “v ”(不區分大小寫)
          • 匹配下列列表中存在的單個字符
            • 一次到無限次,盡可能多地匹配,必要時回溯(貪婪)
            • 一個「數字」(任何 Unicode 文字中的任何十進制數字)
            • 一個「單詞字符」(Unicode;任何字母或表意文字、數字、字母數字、連接符號)
          • 字面匹配字符 “ ”
          • 匹配 Unicode 類別「大寫字母」中的字符(具有小寫變體的大寫字母)

          使用 RegexBuddy 創建

          這裡是一些我用於測試的樣本文本。很可能不完整(在每個示例的結尾,我標記了它是否被捕獲):

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

          所以,這很有趣。希望我沒有偏離太遠。遺憾的是,我永遠記不清 PT 使用的是哪種正則表達式方言(flavour)。如果因為方言不同而導致語法問題,我可以輕鬆地應用另一種方言(如 .NET 或 Java)並重新運行我的工具。

          再次強調:這不是解決方案,但或許有助於開啟對話。

          希望對你有幫助(hth)

          機器翻譯自 English
          (934 點) 提出
          已重新顯示
          0

          我在十分鐘內能想到的最佳方案如下:

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

          我不確定它的準確度如何(它通過了我所有的測試數據,但測試範圍肯定不夠廣泛),所以可能有人能做得更好。 :grin:

          該表達式的簡要說明:

          • (?<=\p{L}) => 向前查看(Look behind)是否有一個字母(即前一節的結尾)
          • (?<!\\[\w+]) => 確保該字母不是標記(marker)的一部分(負向前瞻/negative look behind)
          • \s*(?:\\\w+)?\s* => 跳過節結尾與下一節開頭之間可能存在的任何單一標記和空白字符。
          • \\v [\d\w]+ \p{Lu} => 尋找一個節,其後緊跟一個大寫字母。
          機器翻譯自 English
          [Expert]
          (16.7k 點) 提出

          已重新顯示
          我們在 TkLy - Toka-Ley 聖經翻譯項目中也有同樣的問題。如上段所述,“我想確保我們沒有在節的結尾遺漏任何句號。”
          我將 REGEX 代碼複製並粘貼到「尋找」(Find)窗口中。Paratext 找到了 73 個項目。但不幸的是,除了五個之外,其餘都是緊跟章節標題(Section Heading)或位於章節編號(Chapter Number)之後的節。這五個例外中有四個是沒有句號的有效錯誤。
          有沒有辦法修改 REGEX 以排除緊跟章節標題的節?
          謝謝,
          Mark
          機器翻譯自 English

          相關問題

          0
          2 個回答 296 次瀏覽
          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 提出 已提問 11月 29, 2017
          0
          8 個回答 1.4k 次瀏覽
          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 提出 已提問 8月 20, 2018
          0
          1 個回答 243 次瀏覽
          親愛的 Paratext 使用者們: 我們正在進行一個專案,需要透過正規表示式(regex)將節首的小寫字母改為大寫字母 如果有人能協助處理此事,我將不勝感激 例如: \v 15 ... light from the darkness: and God saw that \add it was\add* good. 感謝致意, Thiyagarajan
          Thiyagarajan 112 提出 已提問 8月 29, 2023
          0
          1 個回答 229 次瀏覽
          有些專案在一段時間後決定不希望腳註末尾出現句號或其他句末標點符號 使用「尋找並取代」是明顯的方法 然而,句號與腳註標記「\f*」之間很容易出現多餘的空格 若要尋找所有腳註末尾的句號,無論句號與 USFM「\f*」之間有多少個空格(包括 ... 除創世記中所有腳註末尾的句號 逐步檢視每個建議的變更,並視情況點擊「是」或「否」 管理員編輯:已修正貼文的格式
          [Expert]
          Jeff_Shrum
          2.9k 提出
          已提問 8月 29, 2022
          0
          2 個回答 306 次瀏覽
          我想搜尋 KJV 中有多少次在句首使用了「and」這個字。有沒有什麼篩選功能可以做到這一點?
          Waseem Raza 102 提出 已提問 6月 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 個問題
          6,005 個回答
          5,671 則評論
          2,026 位使用者