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