0
528 次浏览

我收到了一位译者的这封邮件。我可以写一个简单的正则表达式,但我认为我可能会遗漏一些可能出现在句末的标点符号。有人能帮忙吗?

我希望进行一次最终的标点检查,这不是 Paratext 标准检查的一部分。具体来说,我想确保我们没有在节末遗漏任何句号。(我们在录音过程中已经发现了一些这样的情况。)所以,我基本上是在寻找一些 REGEX 代码,以识别那些以大写开头但前一节并未以句号结尾的地方。(我知道这可能会识别出一些误报,例如当一节以专有名词开头时,但至少这能给我一个比检查所有节更短的列表。如果你能写一些 REGEX 代码来帮助我,我将不胜感激。)

谢谢,

james_post

机器翻译自 English
Paratext [Moderator]
(2.1k 分) 发布
| 528 次浏览

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}

选项:不区分大小写;精确空格;点号匹配换行符

  • 断言在此位置不可能反向匹配下方的正则表达式(负向后行断言)
      • 匹配反斜杠字符
      • 匹配下方列表中存在的单个字符
        • 零次到无限次,尽可能多次,必要时回退(贪婪)
        • “单词字符”(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 使用哪种正则表达式风味。如果因为风味不同导致语法问题,我可以轻松应用另一种风味,如 .NET 或 Java,并重新运行我的工具。

          再次说明:这不是解决方案,但也许有助于开启对话。

          希望有帮助

          机器翻译自 English
          (934 分) 发布
          已重新显示
          0

          我在10分钟内能想出的最佳方案如下:

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

          我不确定它的准确性如何(它通过了我所有的测试数据,但测试范围肯定不够广泛),所以可能有人能做得更好。:grin:

          该表达式的简要说明:

          • (?<=\p{L}) => 向后查找一个字母(即上一节末尾)
          • (?<!\\[\w+]) => 确保该字母不是标记的一部分(负向后行断言)
          • \s*(?:\\\w+)?\s* => 跳过节末尾和下一节开头之间的任意单个标记和任意空白字符。
          • \\v [\d\w]+ \p{Lu} => 查找后跟大写字母的节。
          机器翻译自 English
          [Expert]
          (16.7k 分) 发布

          已重新显示
          我们在 TkLy - Toka-Ley 圣经翻译项目中也有同样的问题。正如上面段落中所述,“我想确保我们没有遗漏任何节末尾的句号。”
          我将 REGEX 代码复制并粘贴到查找窗口中。Paratext 找到了 73 个项目。但不幸的是,除了五个之外,其余都是后跟章节标题或位于章节编号处的节。五个例外中有四个是有效的错误,即没有句号。
          有没有办法修改 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 发布 提问于 十一月 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 发布 提问于 八月 20, 2018
          0
          1 个回答 243 次浏览
          亲爱的 Paratext 用户, 我们正在开展一个项目,需要通过正则表达式将节首的小写字母更改为大写字母 如果有人能在这方面提供帮助,我将不胜感激 例如: \v 15 and ... light from the darkness: and God saw that \add it was\add* good. 谢谢,此致敬礼, Thiyagarajan
          Thiyagarajan 112 发布 提问于 八月 29, 2023
          0
          1 个回答 229 次浏览
          有些项目在一段时间后会决定不希望脚注末尾出现句号或其他句末标点 使用查找和替换是显而易见的方法 然而,在句号和脚注结束标记 \f* 之间很容易出现多余的空格 要查找所有脚注末尾的句号,无论句号和 USFM \f* 之间有多少个空格 ... 除创世记中所有脚注末尾的句号 逐步检查每个建议的更改,并根据情况点击 是 或 否 管理员编辑:已修复帖子格式
          [Expert]
          Jeff_Shrum
          2.9k 发布
          提问于 八月 29, 2022
          0
          2 个回答 306 次浏览
          我想搜索 KJV 中有多少次在句首使用了单词 “and”。有没有什么过滤器可以实现这一点?
          Waseem Raza 102 发布 提问于 六月 12, 2023
          Paratext
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          I appeal to you, brothers and sisters, in the name of our Lord Jesus Christ, that all of you agree with one another in what you say and that there be no divisions among you, but that you be perfectly united in mind and thought.
          1 Corinthians 1:10
          3,045 个问题
          6,005 个回答
          5,671 条评论
          2,026 位用户