Notepad++: есть ли надстройка, регулярное выражение или макрос для разбиения длинного текста на границы предложения
Я занимаюсь переводческой работой, которая требовала, чтобы я разбивал длинные страницы или абзацы на границе предложения, то есть полный останов (.) Для английского языка и Poorn-Viraam (।) для хинди.
Это называется "выравниванием" или (возможно) токенизацией.
Для Notepad++ (w9-32 bit) есть ли надстройка, регулярное выражение или макрос для разделения длинного текста на предложения. (в текстовых текстовых файлах).,
В регулярных выражениях я не могу просто найти. и заменить на.\r\n, потому что. также используется в качестве обозначения аббревиатуры, скажем, в т. е., например, pvt., ltd., inc., и т. д., так что он также заменил бы там, что нежелательно. Кроме того, если в скобках есть несколько предложений () [] {}, то их также не следует разбивать.
Итак, я думаю, что одна команда регулярных выражений просто не подходит, или она станет слишком сложной, чтобы позаботиться обо всех возможностях.
это должен быть набор регулярных выражений, выполняемых один за другим, или макрос,
или если кто-то разработал какое-то дополнение для этого?
Благодарю.
Рават
1 ответ
Как объяснил Сет, чтобы действительно сделать это правильно, потребуется разбор естественного языка. На данный момент это доступно только через специализированные реализации, такие как анализатор Stanford, но не в виде плагинов Notepad++. Но, учитывая несколько основных предположений, я думаю, вы могли бы обойти это, используя простые выражения регулярных выражений.
Я хотел бы начать с предположения, что предложения, которые вы хотите разбить, заканчиваются на ".", Затем с пробелом, а затем с заглавной буквой. Это не будет идеально, но в большинстве случаев позволяет избежать проблем с круглыми скобками и сокращениями.
Так...
\. [A-Z]
А может быть, если предложения начинаются с цифры...
\. [A-Z\d]
Затем, возможно, чтобы сделать его немного более защищенным от пробелов и обрабатывать скобки еще лучше:
\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
- \ s + - для соответствия одному или нескольким пробельным символам
- [^)]}]*? чтобы убедиться, что за. или пробелами нет закрывающей скобки
Я думаю, вы можете поиграть с этим еще немного в зависимости от вашего варианта использования...
Редактировать:
Я обдумывал это немного дольше. Я думаю, вы могли бы также сделать предположение, что хотя предложение может начинаться с одной буквы (например, слова "I" или "A"), оно вряд ли закончится однобуквенным словом (на английском языке).
Так что вы могли бы использовать
[a-zA-Z]{2}\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
Как общая стратегия, все сводится к тому, чтобы оглядываться назад и вперед, к вещам, которые вы делаете или не ожидаете найти в конце или в начале предложения.