Страница 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.