簡體   English   中英

如何計算ruby中字符串的單詞

[英]how to count the words of a string in ruby

我想做這樣的事情

def get_count(string)
 sentence.split(' ').count
end

我認為可能有更好的方法,字符串可能有內置的方法來做到這一點。

我相信count是一個函數所以你可能想要使用length。

def get_count(string) 
    sentence.split(' ').length
end

編輯:如果你的字符串真的很長,從它創建一個數組,任何拆分將需要更多的內存所以這是一個更快的方法:

def get_count(string) 
    (0..(string.length-1)).inject(1){|m,e| m += string[e].chr == ' ' ? 1 : 0 }
end

如果唯一的單詞邊界是單個空格,那么只計算它們。

puts "this sentence has five words".count(' ')+1 # => 5

如果單詞之間有空格,行尾,制表符,逗號后跟空格等,則可能會掃描單詞邊界:

puts "this, is./tfour   words".scan(/\b/).size/2

我知道這是一個老問題,但這可能有助於有人在這里磕磕絆絆。 反對詞是一個復雜的問題。 什么是“字”? 數字和特殊字符算作單詞嗎? 等等...

我為此目的寫了words_counted gem。 它是一個高度靈活,可定制的字符串分析器。 您可以要求它使用正則表達式,字符串和數組來分析字數統計,單詞出現以及排除單詞/字符的任何字符串。

counter = WordsCounted::Counter.new("Hello World!", exclude: "World")
counter.word_count #=> 1
counted.words      #=> ["Hello"]

等等...

文檔和完整源代碼在Github上

我寧願直接檢查單詞邊界:

"Lorem Lorem Lorem".scan(/\w+/).size
=> 3

如果你需要將搖滾樂作為一個單詞匹配,你可以這樣做:

"Lorem Lorem Lorem rock-and-roll".scan(/[\w-]+/).size
=> 4

使用正則表達式還將涵蓋多個空格:

sentence.split(/\S+/).size

字符串沒有任何預先構建的內容可以執行您想要的操作。 您可以在類中定義方法,或者為您要執行的操作擴展String類本身:

def word_count( string )
  return 0 if string.empty?

  string.split.size
end

正則表達式拆分任何非單詞字符:

string.split(/\W+/).size

...雖然它使撇號使用計為兩個單詞,因此根據誤差范圍需要多小,您可能需要構建自己的正則表達式。

我最近發現String#count比將字符串分割超過一個數量級更快。

不幸的是,String#count只接受一個字符串,而不是正則表達式。 此外,它將兩個相鄰的空間視為兩件事,而不是一件事,你必須單獨處理其他空白字符。

p "  some word\nother\tword.word|word".strip.split(/\s+/).size #=> 4

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM