Я занимаюсь переводческой работой, которая требовала, чтобы я разбивал длинные страницы или абзацы на границе предложения, что является точкой (.) Для английского языка и Poorn-Viraam (।) для хинди.

Это называется "выравниванием" или (возможно) токенизацией.

Для Notepad++ (w9-32 bit) есть ли надстройка, регулярное выражение или макрос для разделения длинного текста на предложения. (в текстовых текстовых файлах).,

В регулярных выражениях я не могу просто найти. и заменить на.\r\n, потому что. также используется в качестве обозначения аббревиатуры, например, например, pvt., ltd., inc., и т. д., поэтому он также заменяет его, что нежелательно. Кроме того, если в скобках есть несколько предложений () [] {}, то их также не следует разбивать.

Итак, я думаю, что одна команда регулярных выражений просто не подходит, или она станет слишком сложной, чтобы позаботиться обо всех возможностях.

это должен быть набор регулярных выражений, выполняемых один за другим, или макрос,

или если кто-то разработал какое-то дополнение для этого?

Благодарю.

Рават

1 ответ1

2

Как объяснил Сет, чтобы действительно сделать это правильно, потребуется разбор естественного языка. На данный момент это доступно только через специализированные реализации, такие как анализатор Stanford, но не в виде плагинов Notepad++. Но, учитывая несколько основных предположений, я думаю, вы могли бы обойти это, используя простые выражения регулярных выражений.

Я хотел бы начать с предположения, что предложения, которые вы хотите разбить, заканчиваются на «.», Затем с пробелом, а затем с заглавной буквой. Это не будет идеально, но в большинстве случаев позволяет избежать проблем с круглыми скобками и аббревиатурами.

Так...

\. [A-Z]

А может быть, если предложения начинаются с цифры ...

\. [A-Z\d]

Затем, возможно, чтобы сделать его немного более защищенным от пробелов и обрабатывать скобки еще лучше:

\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]
  • \s+ - для соответствия одному или нескольким пробельным символам
  • [^)]}] *? чтобы убедиться, что за. или пробелами нет закрывающей скобки

Я думаю, вы можете поиграть с этим еще немного в зависимости от вашего варианта использования ...

Редактировать:
Я обдумывал это немного дольше. Я думаю, что вы также можете сделать предположение, что хотя предложение может начинаться с одной буквы (например, слова «I» или «A»), оно вряд ли закончится однобуквенным словом (на английском языке).

Так что вы могли бы использовать

[a-zA-Z]{2}\.[^)\]}]*?\s+[^)\]}]*?[A-Z\d]

Как общая стратегия, все сводится к тому, чтобы оглянуться назад и вперед, к вещам, которые вы делаете или не ожидаете найти в конце или в начале предложения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .