我想要實現的是獲取多語言文本中的單詞數。如何使用Ruby和JavaScript來計算多語言文本中的單詞
如果我有一個英文和中文文本:The last Olympics was held in 北京
,計數應該是8,因爲有六個英文單詞和兩個中文字符,如Microsoft Word中的單詞計數。
在Ruby和JavaScript中這樣做的最好方法是什麼?
我想要實現的是獲取多語言文本中的單詞數。如何使用Ruby和JavaScript來計算多語言文本中的單詞
如果我有一個英文和中文文本:The last Olympics was held in 北京
,計數應該是8,因爲有六個英文單詞和兩個中文字符,如Microsoft Word中的單詞計數。
在Ruby和JavaScript中這樣做的最好方法是什麼?
你可以在JavaScript中試試這個。它基本上通過排除英文中可能出現的每個字符來獲得符號。我可能已經忘記了一些字符,它可能無法與其他具有特殊字符的語言一起使用,但可以嘗試。爲簡潔起見,我使用jQuery的$.trim
函數,但您也可以使用「How do I trim a string in 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庫,並具有一些不錯的功能。
我有一個基於「how can i detect cjk characters in a string in ruby」的解決方案。
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
爲什麼是北京兩個字?你是否真的想到了一般的多語言文本,或只是英文和中文? – sawa
@sawa'北京'應該算作中文的兩個單詞,雖然它們也是兩個漢字,我相信它是中國人。這與英語不同。解決方案涵蓋所有語言將是最好的,中文和英文可能是第一步。 – larryzhao
我可以問爲什麼這是downvoted? – larryzhao