#regex #text #unicode #categories
#регулярное выражение #текст #юникод #Категории
Вопрос:
Проблема
Категории Юникода часто слишком эксклюзивны или слишком инклюзивны, чтобы функционировать как категории для последовательной обработки текста, независимо от того, был ли он набран в notepad (где нажатия клавиш сопоставляются с двойными / одинарными кавычками ASCII, апостроф и т.д.) Или Microsoft Word (где нажатия клавиш сопоставляются с символами, отличными от ASCII, в Unicode или на кодовой странице Windows).
Желаемые категории для обработки текста
Я хотел бы создать текстовый процессор, использующий выражения регулярных выражений, которые могут последовательно и исчерпывающе идентифицировать языковые элементы, такие как:
- апостроф (используется в сокращении, предположительно с буквой с каждой стороны)
- цитата (и, более конкретно, является ли каждый из них начальным / конечным / одинарным / двойным)
- тире (em dash, en dash, дефис, минус и т.д.) — Категория Юникода: «Пунктуация тире»
- открывать / закрывать группировку знаков препинания (круглые скобки и т.д.) — Категории Юникода: «OpenPunctuation» и «ClosePunctuation»
Однако такие категории не всегда соответствуют какой-либо конкретной категории Юникода или набору категорий.
Проблема с цитатой / апострофом
Такие категории, как «Начальная кавычка» и «Окончательная кавычка», не различают одинарные и двойные кавычки, и они фактически исключают обычные двойные и одинарные кавычки ASCII, которые являются нейтральными / прямыми и, следовательно, не попадают ни в начальную, ни в конечную категорию конкретно. Вместо этого мы находим их в категории «Другая пунктуация» наряду со многими другими распространенными, но не связанными символами пунктуации. Реальная проблема заключается в том, что нам нужно отделить символы в одинарных кавычках, чтобы получить полный набор потенциальных символов-апостроф, поскольку кто-то может использовать такие символы в качестве апострофа.
Также проблема с кавычками / апострофами заключается в том, что символы grave и acute, которые можно легко использовать в качестве цитаты / апострофа, введя в блокноте, находятся в категории «ModifierSymbol».
Заключительные соображения по желаемому решению
Я думаю, что категории тире и вводимые в скобки являются достаточно полными, хотя категория «Пунктирная пунктуация» исключает «тире с поворотом» и «пунктирная надпись», которые находятся в категории «Другая пунктуация» с одинарными / двойными кавычками ASCII.
Я полагаю, что для обнаружения языковых элементов, которые я определил выше, потребуется двухэтапный процесс, в котором одному символу Юникода (такому как апостроф ASCII) было бы разрешено сначала попадать в несколько категорий (таких как апостроф И одинарная кавычка), так что вторичная контекстуальная проверка могла бы определить, какая категория лучше всего подходит для ее очевидного использования.
Регулярное выражение для категории кавычек может включать класс символов, подобный этому: [p{Pi} p{Pf}»‘], с дополнительной проверкой, чтобы убедиться, что в нем есть небуквенный символ с одной или другой стороны.
Вопрос
Как я могу систематически и надежно идентифицировать все возможные символы каждой из четырех перечисленных категорий?Как я уже объяснял, одних категорий Юникода недостаточно.
Комментарии:
1. На случай, если вы пропустили комментарии парня, который не придерживается своих собственных слов, тогда отклонил вопрос… Кэш превосходит удаление: P: i54.tinypic.com/24qjw1x.png
2. Я попросил разъяснений, после чего вы начали свой ответ с «Ясно» . Если бы это действительно было ясно, я бы не просил разъяснений, и у вас уже был бы, по крайней мере, ответ. Я удалил свои комментарии, потому что вы не стоите усилий, и я больше не планировал пытаться помочь.
3. Просто чтобы внести ясность: я отклонил вопрос, потому что нахожу его расплывчатым, и вы не отредактировали его, чтобы улучшить. Если вы это сделаете, я с радостью удалю свой голос «против»: это ни в коем случае не мстительный голос!
4. Спасибо за редактирование в актуальном вопросе.
Ответ №1:
Вот пример ответа на случай, если никто не знает, о чем я спрашиваю.
Чтобы идентифицировать символы в категории 1, апостроф, вам нужно:
- Вручную выберите все символы, похожие на апострофы, из двух категорий Юникода InitialQuotePunctuation и FinalQuotePunctuation
- Включите одинарную кавычку ASCII / апостроф (U 0027)
- Включите в Юникод «апостроф с буквой-модификатором» (http://www.fileformat.info/info/unicode/char/02bc/index.htm ) и посмотрите на «см. также раздел», чтобы найти похожие символы, которые могут использоваться в качестве апострофа
Чтобы идентифицировать символы в категории 3, тире, вам нужно:
- Включить символы в категорию «ТИРЕ-пунктуация» Юникода
- Также включите тире-подобные символы «размашистый тире» и «пунктирная надпись» из категории «Другая пунктуация»
- Просмотрите всю базу данных символов Юникода на предмет чего-либо еще, что напоминает тире или может использоваться в качестве него, или откройте различные текстовые процессоры и посмотрите, что они используют в качестве тире, если это не включено в набор, который вы уже определили
и т.д.
Я не думаю, что есть более простой или надежный способ сделать это. Любые мысли или альтернативные методы, или разумные уже определенные наборы символов для этой цели приветствуются.
Комментарии:
1. Пример ответа на самом деле не является ответом. Для этого оно должно быть включено в ваш вопрос вместо этого, IMO.
2. Да, это так. Это не пример в смысле «фиктивного примера того, как должен выглядеть ответ»; скорее, это «реальный ответ, опубликованный для примера». Это мой собственный законный ответ для категорий 1 и 3, так что это частичный ответ. Если кто-то опубликует полный ответ или лучший, я отмечу его как лучший ответ.
3. Что ж, тогда оставьте это там и, возможно, соберите голоса «против» по нему. Мне все равно.