Разбить слово каннада на слоговые кластеры

Нам интересно, есть ли какой-нибудь метод разделения слова каннада для получения слоговых кластеров с использованием 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.

Другие вопросы по тегам