Разбить слово каннада на слоговые кластеры
Нам интересно, есть ли какой-нибудь метод разделения слова каннада для получения слоговых кластеров с использованием JavaScript.
Например, я хочу разделить слово ಕನ್ನಡ
в слоговые кластеры ["ಕ", "ನ್ನ", "ಡ"]
, Но когда я разделил это с split
фактический полученный массив ["ಕ", "ನ", "್", "ನ", "ಡ"]
2 ответа
Я не могу сказать, что это полное решение. Но работает в некоторой степени с некоторым базовым пониманием того, как слова образуются:
var k = 'ಕನ್ನಡ';
var parts = k.split('');
arr = [];
for(var i=0; i< parts.length; i++) {
var s = k.charAt(i);
// while the next char is not a swara/vyanjana or previous char was a virama
while((i+1) < k.length && k.charCodeAt(i+1) < 0xC85 || k.charCodeAt(i+1) > 0xCB9 || k.charCodeAt(i) == 0xCCD) {
s += k.charAt(i+1);
i++;
}
arr.push(s);
}
console.log(arr);
Как говорится в комментариях в коде, мы продолжаем добавлять символы к предыдущему символу, пока они не swara
или же vyanjana
или предыдущий символ был virama
, Возможно, вам придется работать с разными словами, чтобы убедиться, что вы охватите разные случаи. Этот конкретный случай не распространяется на цифры.
Для кодов символов вы можете обратиться по этой ссылке: http://www.unicode.org/charts/PDF/U0C80.pdf
Подумайте об использовании свойства "inSC", связанного с символами Unicode - вы можете получить это из базы данных - которое указывает на индийский символ Syllabic. (Вы также можете обратиться к "категории", чтобы увидеть, если это "не интервал"). Например, "್" имеет тип "Virama" (см. Http://graphemica.com/0CCD). В качестве другого примера, "ಿ" (KANNADA VOWEL SIGN I) имеет InSC "Vowel_Dependent" (и является также в категории "знак без пробелов".) Затем вы можете определить, какие отдельные графемы необходимо объединить с другими, и собрать вместе законченные символы, как показано ниже:
const graphemes = [..."ಕನ್ನಡ"];
console.log("graphemes are", graphemes);
const rebuild = [graphemes[0], graphemes.slice(1, 4).join(''), graphemes[4]];
console.log(rebuild);
Даже если вы можете сделать эту работу, у вас будет больше работы. Мне неясно, как вы обнаружите, что три символа "ನ", "" ್ "и" ನ "должны объединяться, а не рассматриваться как два символа"ನ್"и"ನ". Проблема в том, что в В этом случае virama используется для обозначения группы согласных, поэтому вам нужно будет определить шаблон XVX (где V- virama) и рассматривать его как один комбинированный символ. Вероятно, существует множество других особых случаев.
Это может представлять интерес: https://www.microsoft.com/typography/OpenTypeDev/kannada/intro.htmj. В нем говорится о нахождении "слоговых кластеров", в данном конкретном случае в качестве прелюдии для графической визуализации символов. Вы также можете взглянуть на http://www.unicode.org/L2/L2003/03068-kannada.pdf.