3

我想要实现的是在多语言文本中获得字数。

就像我有一个文本同时有英文和中文:The last Olympics was held in 北京,计数应该是 8,因为有六个英文单词和两个汉字,就像 Microsoft Word 中的字数一样。

在 Ruby 和 JavaScript 中最好的方法是什么?

4

2 回答 2

3

我有一个基于“如何在 ruby​​ 中检测字符串中的 cjk 字符”的解决方案。

s = 'The last Olympics was held in 北京'
class String
  def contains_cjk?
    !!(self =~ /\p{Han}|\p{Katakana}|\p{Hiragana}|\p{Hangul}/)
  end
end
s.split.inject(0) do |sum, word|
  if word.contains_cjk?
    sum += word.length   # => ONLY work in Ruby 1.9. 
                         #    Search for other methods to do this for 1.8
  else
    sum += 1
  end
end
于 2012-09-19T04:46:09.867 回答
1

你可以在 JavaScript 中试试这个。它基本上通过排除英语中可能的每个字符来获取符号。我可能忘记了一些字符,它可能不适用于具有额外特殊字符的其他语言,但请尝试一下。为简洁起见,我使用 jQuery 的$.trim函数,但您也可以使用“如何在 javascript 中修剪字符串? ”。

演示:http: //jsbin.com/otusuv/7/edit

var str = 'The last Olympics 隶草 was held in 北京';
var words = '', symbols = '';
str.replace(/([\w\s]*)([^\w;,.'"{}\[\]+_)(*&\^%$#@!~\/?]*)/g, function(a,b,c) {
    words += b;
    symbols += c;
});
words = $.trim(words).split(' ');
symbols = symbols.replace(' ', '').split('');

var total_words = words.length + symbols.length

您可能还想尝试XRegExp。它是一个 JavaScript 库,可增强正则表达式并具有一些不错的功能。

于 2012-09-19T05:05:22.863 回答