Ответ 1
Вы должны посмотреть Latin-ASCII в CLDR. он будет находиться в ICU 4.6
Я ищу java-библиотеку, которая позволяет "нормализовать" текст. Что-то похоже на стандартное Normalizer, но шире (что-то вроде utf8proc LUMP).
Он должен заменить все виды специальных символов на эквиваленты ASCII (если это возможно, конечно). Все варианты пространства для кода 32, все варианты минусов (длинный, короткий, тонкий и т.д.) До кода 45 и т.д.
Вы должны посмотреть Latin-ASCII в CLDR. он будет находиться в ICU 4.6
Ваши специфические требования немного расплывчаты, но я предполагаю, что вы хотите что-то, что делает Normalizer, но с функцией скомбинировать определенные кодовые обозначения Unicode с одним символом - аналогично utf8proc.
Я бы пошел на двухэтапный подход:
Оба должны быть простыми. Для 2, если вы имеете дело с персонажами из базовой многоязычной панели, то итерации через кодовые точки с помощью соответствующего алгоритма для этого. Если вы используете только кодовые точки BMP, просто перебирайте символы.
Для символов, которые вы хотели бы объединить вместе, создайте структуру данных подстановки для отображения единичной кодовой точки → унифицированной кодовой точки. Map<Character, Character>
или Map<Integer, Integer>
приходят на ум за это. Заполните карту замещения по своему вкусу, например. взяв информацию из utf8proc lump.txt и источник категории символов.
Map<Character, Character> LUMP;
static {
LUMP = new HashMap<Character, Character>();
LUMP.put('\u2216', '\\'); // set minus
LUMP.put('\u007C', '|'); // divides
// ...
}
Создайте новый StringBuilder или нечто подобное с тем же размером, что и ваша нормализованная строка. При повторении кодовых точек проверьте, не имеет ли значение LUMP.get(codePoint)
. В этом случае добавьте возвращаемое значение, иначе добавьте точку кода в StringBuilder. Это должно быть.
При необходимости вы можете поддерживать способ загрузки содержимого LUMP из конфигурации, например. из объекта Properties.
Вы заглянули в icu4j Normalizer?
normalize
преобразует текст Unicode в эквивалентную составленную или разложенную форму, что позволяет упростить сортировку и поиск текста.normalize
поддерживает стандартные формы нормализации, описанные в Unicode Standard Annex # 15 - Unicode Normalization Forms.