Страница 1 из 2

Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 15:15
sparkster
Всем привет!
Я хочу прописать правило для слова et al. и мне нужно, чтобы после al. не было разделения на сегменты. Можно легко прописать правила для al. , но тогда предложения с таким окончанием тоже не будут сегментироваться. Поэтому надо прописывать для et al. целиком.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 17:41
esperantisto
Так в чём сложность-то?

sparkster писал(а):… но тогда предложения с таким окончанием тоже не будут сегментироваться.


Не будут, если правильно прописать шаблон «после».

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 18:10
AsIs
Вот это выражение находит et al. как единое слово: \bet al\b\.
Можно убрать два элемента \b (они означают границу слова), но тогда сюда будут подходить и сочетания, если вдруг такие бывают, с этим et al., например: budget al.
Если предполагается, что между et и al. может оказаться больше одного пробела, то такое выражение: \bet[\s]?al\b\.
*Точки в конце каждого regex'a — это обязательный элемент выражения, а не знаки пунктуации.

Расшифровка:
\b — первая граница слова,
et — часть искомого слова,
\s — пробел,
? — предыдущий элемент встречается один или больше раз,
[\s] — квадратные скобки ограничивают действие знака ?, чтобы он распространялся только на пробел, но не на 'et с пробелом',
al — часть искомого слова,
\b — вторая граница слова,
\. — точка как самостоятельный знак (без \ она означает "любой знак").

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 18:17
esperantisto
А ещё прописать в шаблоне «после»:

Код: Выделить всё
[a-z]


чтобы уж точно исключить случаи, когда там будет следующее предложение.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 18:20
AsIs
Я не пользуюсь OmegaT, но если верить вот этой инструкции, вам нужно согласно пункту 4 в поле "До" указать \bet[\s]?al\b\.
а в поле "После" указать \s
И галочку то ли снять, то ли поставить, не знаю. Попробуйте и так и сяк.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 18:21
AsIs
esperantisto писал(а):А ещё прописать в шаблоне «после»:
Код: Выделить всё
[a-z]
чтобы уж точно исключить случаи, когда там будет следующее предложение.

А... Не успел увидеть это сообщение. Ну вот esperantisto, видимо, точнее подскажет.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 19:06
esperantisto
Не могу не отметить весьма толковое пояснение AsIs, особенно с учётом того, что AsIs не является пользователем программы.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт мар 25, 2021 20:37
AsIs
Спасибо))

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пт мар 26, 2021 09:22
sparkster
Спасибо, что так быстро откликнулись! Я попробовал предложенные варианты правил, но к сожалению, не сработало.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пт мар 26, 2021 11:58
AsIs
Вот так попробуйте:
Шаблон до: \set[\s]*al\.
Шаблон после: \s

*Не знаю, почему, но если заменить знак ? на *, то и это тоже работает:
\bet[\s]*al\b\.

**А... Я знаки перепутал. Не ?, а * должна быть.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пт мар 26, 2021 12:08
AsIs
Но вообще-то странно: у меня сработало и \bet[\s]?al\b\.
Просто ? означает "0 или 1", а не "0 и больше".
То есть со знаком ? этот regex должен ловить, если между et и al. один пробел. И у меня с ? ловит. Но для чистоты эксперимента я одно предложение сделал с четырьмя пробелами. И его regex с ? не cловил. А вот со * словил.
Изображение

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пт мар 26, 2021 12:43
AsIs
Время для редактирования вышло, так что придется флудить еще третье сообщение...
В общем должно работать. Ничё не знаю)) Я с непривычки не сразу разобрался, куда исходный файл там запихать и как обновить (F5, если что). Может, и вы какие-то настройки недонастроили? Язык указывали? Оба выражения рабочие (\bet[\s]?al\b\. и \bet[\s]*al\b\.) — установил программу, лично убедился. С той лишь только разницей, что второе, которое со *, "видит" ваш et al. с более чем одним пробелом в середине.

Короче, чтобы закрепить то, в чем я запутался:
? = 0 или 1 (ловит etal. и et _ al.)
* = 0 и больше (ловит etal. и et _ al. и et _ _ _ _ al.)
+ = 1 и больше (ловит et _ al. и et _ _ _ _ al.)
Знаком _ показаны пробелы, ибо сайт не дает ставить несколько пробелов, превращая их в один.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пт мар 26, 2021 12:55
esperantisto
Покажите:
а) свои правила;
б) пример файла.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Сб мар 27, 2021 14:04
sparkster
Происходят какие-то чудеса! Создал другой чистый проект, добавил файлы оригинала и вписал ваши правила. Все работает! Супер. Возможно в правил основного проекта что-то мешает. Буду разбираться, искать причину.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Сб мар 27, 2021 14:57
esperantisto
Всегда нужно учитывать, что правила применяются последовательно в порядке их записи. То есть, если сегмент разбит из-за предшествующего правила, снова склеить его не получится.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт май 13, 2021 16:17
sparkster
Пытался по аналогии написать правила для аббревиатур с несколькими точками и не могу понять причину, почему они не работают.

К примеру, Reg. no.

Правило такое: шаблон до Reg\.\sno. после \s

или

канд. тех. наук
Шаблон до канд\.\sтех\.наук после \s

Подскажите, в чем может быть проблема?

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Чт май 13, 2021 21:15
esperantisto
Код: Выделить всё
Reg\.\sno.


Вторая точка не экранирована. Это во-первых. А во-вторых, сначала неплохо бы прописать, что не надо разделять Reg. и no., иначе между ними (скорее всего) будет разрыв и правило просто не будет работать.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пн май 17, 2021 06:52
sparkster
esperantisto писал(а):
Код: Выделить всё
Reg\.\sno.


Вторая точка не экранирована. Это во-первых. А во-вторых, сначала неплохо бы прописать, что не надо разделять Reg. и no., иначе между ними (скорее всего) будет разрыв и правило просто не будет работать.


Спасибо за обратную связь! Вторую точку заэкранировал, но правило по-прежнему не работает. Как запретить разделение предложений? Какой для этого нужен тег?

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пн май 17, 2021 09:23
esperantisto
Ещё раз: сначала следует добавить правило, чтобы не разбивать Reg. и no., что-то типа:
перед:
Код: Выделить всё
Reg\.

после:
Код: Выделить всё
\s\no\.


А в чём смысл запрета разделения предложений? Ну, снимите галочку «Сегментирование по предложениям» в свойствах проекта.

Re: Прописать правило сегментирования для слова с пробелом

СообщениеДобавлено: Пн май 17, 2021 10:46
sparkster
esperantisto писал(а):Ещё раз: сначала следует добавить правило, чтобы не разбивать Reg. и no., что-то типа:
перед:
Код: Выделить всё
Reg\.

после:
Код: Выделить всё
\s\no\.

С таким правилом предложение все равно разбивается. Я попробовал вместо \s\no\. написать \sno\. - это тоже не сработало.

esperantisto писал(а): А в чём смысл запрета разделения предложений? Ну, снимите галочку «Сегментирование по предложениям» в свойствах проекта.

Возможно я не так выразился. Я как раз и имел в виду правило, которое будет препятствовать разбиению двух сокращений в слове Reg. no.