У меня есть задача подсчитать количество воспринимаемых символов во входных данных. Входными данными является группа целых чисел (мы можем думать о ней как int []
), которая представляет кодовые точки Unicode.
java.text.BreakIterator.getCharacterInstance () не допускается. (Я имею в виду, что их формула разрешена, и это то, что я хотел, но переплетение их исходного кода и таблиц состояний ни к чему не привело>.
Мне было интересно, каков правильный алгоритм для подсчета количества графем-кластеров с учетом некоторого кода баллов?
Изначально я думал, что все, что мне нужно сделать, это объединить все вхождения:
U + 0300 - U + 036F
(объединение диакритических знаков)
U + 1DC0 - U + 1DFF
(добавление диакритических знаков)
U + 20D0 - U + 20FF
(объединение диакритических знаков для символов)
U + FE20 - U + FE2F
(объединение половин mark)
в предыдущий недиакритический знак.
Однако я понял , что перед этой операцией я должен сначала удалить все не-символы.
Это включает:
U + FDD0 - U + FDEF
Последние две кодовые точки каждой плоскости
Но, похоже, есть еще кое-что, что нужно сделать. Юникод.org заявляет, что нам необходимо включить U + 200C
(объединитель нулевой ширины) и U + 200D
(объединитель нулевой ширины) как часть набора продолжающихся символов (источник) .
Кроме того, здесь говорится еще о паре вещей, но вся тема рассматривается абстрактно. Например, каковы диапазоны кодовых точек для интервалов комбинирования знаков , символов хангыль джамо, которые образуют слоги хангыль ?
Кто-нибудь знает правильный алгоритм для подсчета количества графем- кластеры с int []
кодовых точек?