私が達成したいのは、多言語テキストの単語数を取得することです。
テキストに English と Chinese: の両方が含まれている場合のようにThe last Olympics was held in 北京
、カウントは 8 になります。これは、Microsoft Word の単語数と同様に、6 つの英単語と 2 つの漢字があるためです。
Ruby と JavaScript でそれを行う最善の方法は何ですか?
私が達成したいのは、多言語テキストの単語数を取得することです。
テキストに English と Chinese: の両方が含まれている場合のようにThe last Olympics was held in 北京
、カウントは 8 になります。これは、Microsoft Word の単語数と同様に、6 つの英単語と 2 つの漢字があるためです。
Ruby と JavaScript でそれを行う最善の方法は何ですか?
「ルビーの文字列で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
これを JavaScript で試すことができます。基本的に、英語で可能なすべての文字を除外して記号を取得します。一部の文字を忘れた可能性があり、特別な文字が追加されている他の言語では機能しない可能性がありますが、試してみてください. $.trim
簡潔にするためにjQueryの関数を使用していますが、「 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 ライブラリです。