2012-09-19 70 views
3

我想要實現的是獲取多語言文本中的單詞數。如何使用Ruby和JavaScript來計算多語言文本中的單詞

如果我有一個英文和中文文本:The last Olympics was held in 北京,計數應該是8,因爲有六個英文單詞和兩個中文字符,如Microsoft Word中的單詞計數。

在Ruby和JavaScript中這樣做的最好方法是什麼?

+1

爲什麼是北京兩個字?你是否真的想到了一般的多語言文本,或只是英文和中文? – sawa

+1

@sawa'北京'應該算作中文的兩個單詞,雖然它們也是兩個漢字,我相信它是中國人。這與英語不同。解決方案涵蓋所有語言將是最好的,中文和英文可能是第一步。 – larryzhao

+2

我可以問爲什麼這是downvoted? – larryzhao

回答

0

你可以在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庫,並具有一些不錯的功能。

3

我有一個基於「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 
+0

這將cjk中的每個字母都統一爲一個單詞。 – sawa

+0

不錯的解決方案,也是第一個答案,但@elcanrs的答案可以在ruby和javascript中使用,所以我選擇他。謝謝。 – larryzhao

相關問題