Как я могу систематически и надежно идентифицировать все возможные символы Юникода, которые могут вписаться в определенную пользовательскую категорию, такую ​​как «апострофы»? - PullRequest
1 голос
/ 27 апреля 2011

Задача

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

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

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

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

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

Цитата / Апостроф Проблема

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

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

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

Я думаю, что тире и скобки довольно полные, хотя категория «DashPunctuation» исключает «swung dash» и «dashed overline», которые встречаются в категории «OtherPunctuation» с одиночными / двойными кавычками ASCII.

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

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

Вопрос

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

1 Ответ

0 голосов
/ 28 апреля 2011

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

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

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

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

  1. Включить символы в категорию Unicode "DashPunctuation"
  2. Также включают в себя тиреоподобные символы "swung dash" и "dashed overline" из категории "OtherPunctuation"
  3. Просматривайте всю базу данных символов Unicode для чего-либо, что напоминает или может использоваться в качестве черты или открывает различные текстовые процессоры, и посмотрите, что они используют в качестве черты, если она не включена в набор, который вы уже определили

и т.д.

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

...