Сегментация в OmegaT: тяжело в учении, легко в бою

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

Правила сегментации по умолчанию

Некорректная сегментация (3 предложения в одном сегменте):
I have a solution. Do you want to validate the solution? Yes, I do!

Так выглядит стандартное правило, отвечающее за самую базовую сегментацию:

Break или Exception Pattern before Pattern after
Break (флажок установлен). Break означает разделение сегмента. [.?!]+ p{Zs}

Функция правила: сегментирует текст по точке, вопросительному или восклицательному знаку, при условии что за ними следует любой пробел.

Результат:
I have a solution.
Do you want to validate the solution?
Yes, I do!

Добавление своего правила сегментации, объединяющего сегменты

Некорректно разбитые сегменты можно легко соединять следующим образом:

Некорректная сегментация:
Int.
10 should be replaced.
Где «Int.» — сокращенное слово.

Предложение сегментировалось по точке, которая обозначает сокращение слова. Мне нужно объединить его сразу после точки. Для этого достаточно добавить простейшее правило с исключением. Добавлять лучше в правила для конкретного языка (в данном случае английского), чтобы новое правило имело приоритет перед базовым:

Break или Exception Pattern before Pattern after
Exception (флажок снят). Exception означает соединение двух сегментов. Int. (обратная косая черта означает, что точка является действительно точкой, а не регулярным выражением, соответствующим одному любому знаку) s (пробел)

Результат:
Int. 10 should be replaced.

Однако на самом деле это слишком простое правило, которое будет часто давать сбои. Например вместо «Int.» в тексте может встречаться «int.» со строчной буквы.

Некорректная сегментация:
The int.
10 should be replaced.

Поскольку в правиле «Int.» начинается с прописной буквы и в правилах учитывается регистр, правило в этом случае не срабатывает. Нужно его «допилить», указав, что «I» может быть как строчной, так и прописной:

Break или Exception Pattern before Pattern after
Exception (флажок снят) (?i)int. s

Результат:
The int. 10 should be replaced.

Но этим мои испытания не заканчиваются, потому что оказывается, что это сокращение может совпадать с частью другого слова, стоящего в конце предложения! В результате правило объединяет два «невинных» предложения:

Некорректная сегментация:
She might faint. Or she might get furious.

Чтобы избежать этого, нужно дополнительно подрегулировать правило. Один из многочисленных вариантов в моем случае — это указать, что «int.» нужно объединять со следующим предложением, только когда это отдельно стоящее слово:

Break или Exception Pattern before Pattern after
Exception (флажок снят) b(?i)int.
(b означает границу слова)
s

Результат:
She might faint.
Or she might get furious.

Добавление своего правила сегментации, разбивающего сегмент

Помимо объединения часто приходится разделять два предложения, соединенные изначально в одно. В этом случае правило строится на том элементе, который вызывает склеивание двух предложений. А второй элемент правила — зачастую просто точка, т. е. регулярное выражение, соответствующее одному любому знаку.

Некорректная сегментация:
Open the Settings window.
Open the Files tab.

В этом примере предложения соединены тегом, который написан простым текстом. Этот тег и станет основой правила:

Break или Exception Pattern before Pattern after
Break (флажок установлен) . (точка)
Break (флажок установлен) . (точка)

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

Open the Settings window.

Open the Files tab.

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

Open the Settings window.

Open the Files tab.

Заключение

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

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

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *