首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外语中的字数

外语中的字数
EN

Stack Overflow用户
提问于 2012-12-11 07:39:53
回答 2查看 3K关注 0票数 7

对于非英语字母是否有实现字符计数的最佳方法?例如,如果我们用英语中的单词“母亲”,它是一个6个字母的单词。但是,如果在泰米尔语中键入相同的单词(ம+த+ர்),则它是一个三个字母单词(ர+ஂ=ர்),但系统将把最后一个字母(ர்)视为两个字符(ர+ஂ=ர்)。那么,有没有办法计算真实字符的数量呢?

一条线索是,如果我们将键盘中的光标移动到单词(மதர்)中,它只会通过3个字母,而不是系统考虑的4个字符,那么有什么方法可以通过这个方法找到解决方案呢?如果能对此提供任何帮助,我们将不胜感激.

EN

回答 2

Stack Overflow用户

发布于 2012-12-11 08:05:51

更新

代码语言:javascript
复制
var UnicodeNsm = [Array 1280] //It holds all escaped Unicode Non Space Marks
function countNSMString(str) {
    var chars = str.split("");
    var count = 0;
    for (var i = 0,ilen = chars.length;i<ilen;i++) {
      if(UnicodeNsm.indexOf(escape(chars[i])) == -1) {
        count++;
       }
    }
    return count;
}

var English = "Mother";  
var Tamil = "மதர்";
var Vietnamese = "mẹ"
var Hindi = "मां"

function logL (str) {    
      console.log(str + " has " + countNSMString(str) + " visible Characters and " + str.length + " normal Characters" ); //"மதர் has 3 visible Characters"
}

logL(English) //"Mother has 6 visible Characters and 6 normal Characters"
logL(Tamil) //"மதர் has 3 visible Characters and 4 normal Characters"
logL(Vietnamese) //"mẹ has 2 visible Characters and 3 normal Characters"
logL(Hindi) //"मां has 1 visible Characters and 3 normal Characters"

因此,这只是检查字符串中是否有任何字符是Unicode NSM字符,并且忽略了这方面的计数,这应该适用于大多数语言,而不仅仅是泰米尔语,一个包含1280个元素的数组不应该成为性能问题。

下面是Unicode的http://www.fileformat.info/info/unicode/category/Mn/list.htm列表

这里是 JSBin

在对字符串操作进行了一些实验之后,结果表明,String.indexOf返回相同的

"ர்""ர"的意义

"ர்ரர".indexOf("ர்") == "ர்ரர".indexOf("ர" + "்") //true但是

"ர்ரர".indexOf("ர") == "ர்ரர".indexOf("ர" + "ர") //假

我抓住这个机会尝试了这样的方法

代码语言:javascript
复制
//ர்

var char = "ரர்ர்ரர்்";
var char2 = "ரரர்ர்ரர்்";    
var char3 = "ர்ரர்ர்ரர்்";

function countStr(str) {
         var  chars = str.split("");
         var count = 0;
          for(var i = 0, ilen = chars.length;i<ilen;i++) {
                 var chars2 = chars[i] + chars[i+1];   
                 if (str.indexOf(chars[i]) == str.indexOf(chars2))
                   i += 1;
               count++;
            }
         return count;
 }


console.log("--");

console.log(countStr(char)); //6

console.log(countStr(char2)); //7

console.log(countStr(char3)); //7

这似乎适用于上面的字符串,它可能需要一些调整,因为我对编码和其他方面一无所知,但也许你可以从以下几个方面开始:

这里是JSBin

票数 8
EN

Stack Overflow用户

发布于 2012-12-11 12:06:23

您可以忽略计数计算中的组合标记与此函数:

代码语言:javascript
复制
function charCount( str ) {
    var re = /[\u0300-\u036f\u1dc0-\u1dff\u20d0-\u20ff\ufe20-\ufe2f\u0b82\u0b83\u0bbe\u0bbf\u0bc0-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7]/g
    return str.replace( re, "").length;
}

console.log(charCount('மதர்'))// 3

//More tests on random Tamil text:
//Paint the text character by character to verify, for instance 'யெ' is a single character, not 2

console.log(charCount("மெய்யெழுத்துக்கள்")); //9
console.log(charCount("ஒவ்வொன்றுடனும்")); //8
console.log(charCount("தமிழ்")); //3
console.log(charCount("வருகின்றனர்.")); //8
console.log(charCount("எழுதப்படும்")); //7

泰米尔语的符号和标记没有在unicode中与目标字符组合成单个字符,因此规范化不会有帮助。我已经手动地将所有泰米尔语的标记或符号添加到正则表达式中,但它也包含了正常组合标记的范围,因此无论规范化形式如何,charCount("ä")都是1

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13815678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档