Как я могу систематически и надежно идентифицировать все возможные символы Юникода, которые могут соответствовать определенной пользовательской категории, такой как «апострофы»?

#regex #text #unicode #categories

#регулярное выражение #текст #юникод #Категории

Вопрос:

Проблема

Категории Юникода часто слишком эксклюзивны или слишком инклюзивны, чтобы функционировать как категории для последовательной обработки текста, независимо от того, был ли он набран в notepad (где нажатия клавиш сопоставляются с двойными / одинарными кавычками ASCII, апостроф и т.д.) Или Microsoft Word (где нажатия клавиш сопоставляются с символами, отличными от ASCII, в Unicode или на кодовой странице Windows).

Желаемые категории для обработки текста

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

  1. апостроф (используется в сокращении, предположительно с буквой с каждой стороны)
  2. цитата (и, более конкретно, является ли каждый из них начальным / конечным / одинарным / двойным)
  3. тире (em dash, en dash, дефис, минус и т.д.) — Категория Юникода: «Пунктуация тире»
  4. открывать / закрывать группировку знаков препинания (круглые скобки и т.д.) — Категории Юникода: «OpenPunctuation» и «ClosePunctuation»

Однако такие категории не всегда соответствуют какой-либо конкретной категории Юникода или набору категорий.

Проблема с цитатой / апострофом

Такие категории, как «Начальная кавычка» и «Окончательная кавычка», не различают одинарные и двойные кавычки, и они фактически исключают обычные двойные и одинарные кавычки ASCII, которые являются нейтральными / прямыми и, следовательно, не попадают ни в начальную, ни в конечную категорию конкретно. Вместо этого мы находим их в категории «Другая пунктуация» наряду со многими другими распространенными, но не связанными символами пунктуации. Реальная проблема заключается в том, что нам нужно отделить символы в одинарных кавычках, чтобы получить полный набор потенциальных символов-апостроф, поскольку кто-то может использовать такие символы в качестве апострофа.

Также проблема с кавычками / апострофами заключается в том, что символы grave и acute, которые можно легко использовать в качестве цитаты / апострофа, введя в блокноте, находятся в категории «ModifierSymbol».

Заключительные соображения по желаемому решению

Я думаю, что категории тире и вводимые в скобки являются достаточно полными, хотя категория «Пунктирная пунктуация» исключает «тире с поворотом» и «пунктирная надпись», которые находятся в категории «Другая пунктуация» с одинарными / двойными кавычками ASCII.

Я полагаю, что для обнаружения языковых элементов, которые я определил выше, потребуется двухэтапный процесс, в котором одному символу Юникода (такому как апостроф ASCII) было бы разрешено сначала попадать в несколько категорий (таких как апостроф И одинарная кавычка), так что вторичная контекстуальная проверка могла бы определить, какая категория лучше всего подходит для ее очевидного использования.

Регулярное выражение для категории кавычек может включать класс символов, подобный этому: [p{Pi} p{Pf}»‘], с дополнительной проверкой, чтобы убедиться, что в нем есть небуквенный символ с одной или другой стороны.

Вопрос

Как я могу систематически и надежно идентифицировать все возможные символы каждой из четырех перечисленных категорий?Как я уже объяснял, одних категорий Юникода недостаточно.

Комментарии:

1. На случай, если вы пропустили комментарии парня, который не придерживается своих собственных слов, тогда отклонил вопрос… Кэш превосходит удаление: P: i54.tinypic.com/24qjw1x.png

2. Я попросил разъяснений, после чего вы начали свой ответ с «Ясно» . Если бы это действительно было ясно, я бы не просил разъяснений, и у вас уже был бы, по крайней мере, ответ. Я удалил свои комментарии, потому что вы не стоите усилий, и я больше не планировал пытаться помочь.

3. Просто чтобы внести ясность: я отклонил вопрос, потому что нахожу его расплывчатым, и вы не отредактировали его, чтобы улучшить. Если вы это сделаете, я с радостью удалю свой голос «против»: это ни в коем случае не мстительный голос!

4. Спасибо за редактирование в актуальном вопросе.

Ответ №1:

Вот пример ответа на случай, если никто не знает, о чем я спрашиваю.

Чтобы идентифицировать символы в категории 1, апостроф, вам нужно:

  1. Вручную выберите все символы, похожие на апострофы, из двух категорий Юникода InitialQuotePunctuation и FinalQuotePunctuation
  2. Включите одинарную кавычку ASCII / апостроф (U 0027)
  3. Включите в Юникод «апостроф с буквой-модификатором» (http://www.fileformat.info/info/unicode/char/02bc/index.htm ) и посмотрите на «см. также раздел», чтобы найти похожие символы, которые могут использоваться в качестве апострофа

Чтобы идентифицировать символы в категории 3, тире, вам нужно:

  1. Включить символы в категорию «ТИРЕ-пунктуация» Юникода
  2. Также включите тире-подобные символы «размашистый тире» и «пунктирная надпись» из категории «Другая пунктуация»
  3. Просмотрите всю базу данных символов Юникода на предмет чего-либо еще, что напоминает тире или может использоваться в качестве него, или откройте различные текстовые процессоры и посмотрите, что они используют в качестве тире, если это не включено в набор, который вы уже определили

и т.д.

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

Комментарии:

1. Пример ответа на самом деле не является ответом. Для этого оно должно быть включено в ваш вопрос вместо этого, IMO.

2. Да, это так. Это не пример в смысле «фиктивного примера того, как должен выглядеть ответ»; скорее, это «реальный ответ, опубликованный для примера». Это мой собственный законный ответ для категорий 1 и 3, так что это частичный ответ. Если кто-то опубликует полный ответ или лучший, я отмечу его как лучший ответ.

3. Что ж, тогда оставьте это там и, возможно, соберите голоса «против» по нему. Мне все равно.