我们想知道是否有任何方法来分割一个Kannada单词,以获得使用JavaScript的音节簇。
例如,我想把单词ಕನ್ನಡ分割成音节簇["ಕ", "ನ್ನ", "ಡ"]。但是当我用split拆分它时,实际得到的数组是["ಕ", "ನ", "್", "ನ", "ಡ"]
发布于 2017-06-01 13:23:20
我不能说这是一个完整的解决办法。但在某种程度上对单词的形成有一些基本的理解:
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
发布于 2017-06-01 13:18:19
考虑使用与Unicode字符相关联的"inSC“属性--您可以从数据库中获得--这表明了Indic音节字符。(您也可以参考“类别”,看看它是否是“非间距标记”)。例如,“್”的类型为"Virama“(参见http://graphemica.com/0CCD)。举另一个例子,"ಿ”(KANNADA元音符号I)有一个InSC of "Vowel_Dependent“(也属于”非空格标记“)。然后,您可以检测哪些单独的图形需要与其他图形组合,并将完整的字符组合在一起,如下所示:
const graphemes = [..."ಕನ್ನಡ"];
console.log("graphemes are", graphemes);
const rebuild = [graphemes[0], graphemes.slice(1, 4).join(''), graphemes[4]];
console.log(rebuild);
即使你能做到这一点,你也有更多的工作要做。我不清楚你会如何检测到三个字符“ನ”,“”್“和"ನ”将被组合起来,而不是被视为两个字符"ನ್“和"ನ”。问题是,在这种情况下,virama被用来表示辅音簇,所以您需要识别X模式(其中V是virama),并将其作为一个组合字符来处理。可能还有很多这样的特殊情况。
这可能会引起人们的兴趣:https://www.microsoft.com/typography/OpenTypeDev/kannada/intro.htmj。它谈到寻找“音节集群”,在这个特殊的情况下,作为一个序曲,以图形化的字符。您可能还想看看http://www.unicode.org/L2/L2003/03068-kannada.pdf。
https://stackoverflow.com/questions/44307464
复制相似问题