0 голосов
528 просмотров

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

Я надеюсь провести финальную проверку пунктуации, которая не входит в стандартные проверки в Paratext. В частности, я хочу убедиться, что мы не забыли поставить точки в конце стихов. (Я уже поймал несколько таких, пока мы записывали.) Так что я в основном ищу какое-то регулярное выражение (REGEX), которое бы выявляло места, где стих начинается с заглавной буквы, но предыдущий стих НЕ заканчивается точкой. (Я знаю, что это может выявить некоторые ложные срабатывания, например, если стих начинается с собственного имени, но хотя бы даст мне более короткий список для проверки, чем проверка всех стихов. Если вы сможете написать какое-то регулярное выражение, чтобы помочь мне, я буду очень благодарен.)

Спасибо,

james_post

Переведено машиной с языка English
Paratext от [Moderator]
(2,1тыс. очков)
| 528 просмотров

2 Ответов

+1 голос
Лучший ответ

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

  • (?<=\p{L}) => Хорошо, но я предлагаю включить «букву» в фактическое совпадение, чтобы пользователь видел, где регулярное выражение заметило потенциальный «конец предложения». Комплименты за то, что вы учли и заглавные, и строчные буквы. Так что в моем предложении я заменяю ?<= на ?:.

  • (?<!\\[\w+]) => Я считаю, что для вашей цели избежать ложных срабатываний с некоторым маркером, эта часть должна быть слева от вашей «буквы». Также + должен быть вне квадратных скобок, так как у многих маркеров несколько символов, например \s1.

  • И некоторые маркеры включают *, например конец чего-либо, как \em*. Я смутно помню, что некоторые маркеры могут или даже должны включать +. Если это так, вы можете легко добавить в список символов, например [\w*+].

  • \s*(?:\\\w+)?\s* => Я заменяю это на «пропустить любое количество потенциальных маркеров и любые пробелы между концом стиха и началом следующего стиха».

  • \\v [\d\w]+ \p{Lu} => Найти стих, за которым следует заглавная буква. Кажется, вы уверены здесь в «классическом пробеле» между \v и номером стиха и после номера стиха, поэтому я сохранил этот синтаксис.

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

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

Вот описание моего регулярного выражения, согласно моему инструменту:

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

(?<!\\[\w\*]*)(?:\p{L})\s*(?:\\[\w\*]+\s+)*\\v [\d\w]+ \p{Lu}

Опции: Без учета регистра; Точное расстояние; Точка соответствует переносу строки

  • Утверждение, что невозможно сопоставить регулярное выражение ниже в обратном направлении в этой позиции (отрицательный просмотр назад)
      • Сопоставить символ обратного слэша
      • Сопоставить один символ, присутствующий в списке ниже
        • От нуля до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
        • «Словесный символ» (Unicode; любая буква или иероглиф, цифра, буквенный номер, соединительная пунктуация)
        • Буквальный символ «*»
    • Сопоставить регулярное выражение ниже
        • Сопоставить символ из категории Unicode «буква» (любой вид буквы из любого языка)
      • Сопоставить один символ, который является «символом пробела» (любой разделитель Unicode, табуляция, перевод строки, возврат каретки, вертикальная табуляция, перевод формы, следующая строка, символ нулевой ширины)
        • От нуля до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
        • Сопоставить регулярное выражение ниже
          • От нуля до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
          • Сопоставить символ обратного слэша
          • Сопоставить один символ, присутствующий в списке ниже
            • От одного до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
            • «Словесный символ» (Unicode; любая буква или иероглиф, цифра, буквенный номер, соединительная пунктуация)
            • Буквальный символ «*»
          • Сопоставить один символ, который является «символом пробела» (любой разделитель Unicode, табуляция, перевод строки, возврат каретки, вертикальная табуляция, перевод формы, следующая строка, символ нулевой ширины)
            • От одного до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
          • Сопоставить символ обратного слэша
          • Сопоставить строку символов «v » буквально (без учета регистра)
          • Сопоставить один символ, присутствующий в списке ниже
            • От одного до бесконечного количества раз, столько раз, сколько возможно, отступая по необходимости (жадное)
            • «Цифра» (любая десятичная цифра в любой системе записи Unicode)
            • «Словесный символ» (Unicode; любая буква или иероглиф, цифра, буквенный номер, соединительная пунктуация)
          • Сопоставить символ « » буквально
          • Сопоставить символ из категории Unicode «заглавная буква» (заглавная буква, у которой есть строчный вариант)

          Создано с помощью RegexBuddy

          А вот и некоторый пример текста, который я использовал для тестирования. Скорее всего, он неполный (в конце каждого примера я отмечаю, является ли это совпадением или нет):

          \v 8 Some text without \em punctuation\em* \rem \any \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text without \em punctuation\em*  \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text without punctuation \v 9a A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 8 Some text with proper \em punctuation.\em* \just \one \more \v 9 A new verse which is a new sentence, starting with a capital.  [punctuation present, so no catch]
          
          \v 8 Some text ending an an all-cap word like \em LORD\em* \v 9 A new verse which is a new sentence, starting with a capital.  [catch]
          
          \v 10 A long sentence \whatever \v 11a  over two verses or more.  [No punctuation needed, so no catch]
          

          Так что, это было весело. Надеюсь, я не слишком ошибаюсь. К сожалению, я никогда не могу вспомнить, какой вариант регулярных выражений использует PT. Если есть проблемы с синтаксисом из-за вариантов, я мог бы легко применить другой, например .NET или Java, и запустить мой инструмент снова.

          Еще раз: Не решение, но, возможно, полезное, чтобы начать диалог.

          hth

          Переведено машиной с языка English
          от (934 очков)
          снова показан
          0 голосов

          Лучшее, что мне удалось придумать за 10 минут, — следующее:

          (?<=\p{L})(?<!\\[\w+])\s*(?:\\\w+)?\s*\\v [\d\w]+ \p{Lu}
          

          Не уверен, насколько оно точно (оно прошло все мои тестовые данные, но они, конечно, не были исчерпывающими), так что, возможно, кто-то сделает лучше. :grin:

          Краткое объяснение выражения:

          • (?<=\p{L}) => Посмотреть назад на букву (т.е. конец предыдущего стиха)
          • (?<!\\[\w+]) => Убедиться, что буква не является частью маркера (отрицательный просмотр назад)
          • \s*(?:\\\w+)?\s* => Пропустить любой одиночный маркер и любые пробелы между концом стиха и началом следующего стиха.
          • \\v [\d\w]+ \p{Lu} => Найти стих, за которым следует заглавная буква.
          Переведено машиной с языка English
          от [Expert]
          (16,7тыс. очков)

          снова показан
          У нас та же проблема для TkLy — проекта перевода Библии Toka-Ley. Как указано в абзаце выше: «Я хочу убедиться, что мы не забыли поставить точки в конце стихов».
          Я скопировал и вставил код REGEX в окно поиска. Paratext нашел 73 элемента. Но, к сожалению, все, кроме пяти, были стихами, за которыми следовал Заголовок раздела или Номер главы. Четыре из пяти исключений были действительными ошибками, в которых отсутствовала точка.
          Есть ли способ изменить REGEX, чтобы исключить стихи, за которыми следуют Заголовки разделов?
          Спасибо,
          Mark
          Переведено машиной с языка English

          Похожие вопросы

          0 голосов
          2 ответов 296 просмотров
          We have several languages in our area that do not normally use punctuation to mark end of sentence. They mark end of ... a lot of Punctuation missing at end of Paragraph . Thanks
          MSEAIT_LT 478 задал вопрос ноя 29, 2017
          0 голосов
          8 ответов 1,4тыс. просмотров
          We have a user who has inserted a lot of \pn and some \nd inside of footnotes. We now know we need those to be ... the search to inside of a single footnote? Thank you, MSEAIT/LT
          MSEAIT_LT 478 задал вопрос авг 20, 2018
          0 голосов
          1 ответ 243 просмотров
          Уважаемые пользователи Paratext, Мы работаем над проектом и нам нужно изменить первую букву стиха со строчной на заглавную с ... was\add* good. Спасибо и с уважением, Thiyagarajan
          Thiyagarajan 112 задал вопрос авг 29, 2023
          0 голосов
          1 ответ 229 просмотров
          Некоторые проекты со временем решают, что не хотят ставить точки или другие знаки препинания в ... необходимости. Редактирование администратора: Исправлено форматирование поста.
          [Expert]
          Jeff_Shrum
          2,9тыс.
          задал вопрос авг 29, 2022
          0 голосов
          2 ответов 306 просмотров
          Я хочу найти, сколько раз в KJV использовалось слово «and» (и) в начале предложения. Есть ли какой-нибудь фильтр, чтобы сделать это?
          Waseem Raza 102 задал вопрос июн 12, 2023
          Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
          And let us consider how we may spur one another on toward love and good deeds, not giving up meeting together, as some are in the habit of doing, but encouraging one another—and all the more as you see the Day approaching.
          Hebrews 10:24-25
          3,045 вопросов
          6,005 ответов
          5,671 комментариев
          2,026 пользователей