我正在从事翻译工作,这需要我在句子边界处分拆长页或段落,即英语的句号 (.) 和印地语的 Poorn-Viraam (।)。
这被称为“对齐”或(可能)标记化。
对于 Notepad++ (w9-32 位),是否有任何插件或正则表达式或宏可以将长文本拆分为句子。(在纯文本 txt 文件中)。,
在正则表达式中,我无法直接找到 . 并将其替换为 .\r\n,因为 . 也用作缩写表示,例如,在 ie 中,例如 pvt.、ltd.、inc. 等。因此它也会替换那里,这是不可取的。此外,如果括号 () [] {} 中有多个句子,那么这些句子也不应该被破坏。
因此,我猜测单个正则表达式命令是不够的,或者它会变得太复杂而无法处理所有可能性。
它必须是一组接连执行的正则表达式,或者是一个宏,
或者是否有人为此开发了一些附加组件?
谢谢。
拉瓦特
答案1
正如塞斯所解释的那样,真的要正确做到这一点,需要自然语言解析。目前,这只能通过专门的实现来实现,例如斯坦福解析器,但不是 Notepad++ 插件。但是,根据一些基本假设,我认为您可以使用简单的正则表达式来解决这个问题。
我首先假设要拆分的句子以“.”结尾,然后有一个空格,然后是一个大写字母。这并不完美,但可以避免括号和缩写问题在多数情况下。
所以...
\. [A-Z]
也许,如果句子以数字开头......
\. [A-Z\d]
然后,也许可以使其更加防空格,并更好地处理括号:
\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
- \s+ - 匹配一个或多个空格字符
- [^)]}]*? 确保 . 后面没有右括号或空格
我想您可以根据您的使用情况对此进行更多尝试......
编辑:
我对此思考了很久。我认为你也可以假设,虽然一个句子可以开始只有一个字母(比如单词“I”或“A”),它不太可能结尾在一个字母的单词上(英文)。
所以你可以使用
[a-zA-Z]{2}\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
作为一个总体策略,它只是归结为回顾和展望,寻找你期望或不期望在句子结尾或开头找到的东西。