2011-07-26 41 views

回答

3

一個巨大的正則表達式是更快它會走路的文本只有一次。

此外,如果您不需要文本,只有單詞,最後,您可以使文本成爲一組downcased的單詞,然後刪除過濾器數組中的單詞。但是這隻有在最後不需要「文本」纔有意義(通常用於標籤或全文搜索)時纔有效。

0

用每個有效的關鍵字作爲關鍵字創建一個散列。

keywords = %w[foo bar baz] 
keywords_hash = Hash[keywords.map{|k|[k,true]}] 

假設所有關鍵字都是3個字以上,並且由 字母數字字符或破折號,情況是無關緊要的, 你只想每個關鍵字出現在文本返回一次:

keywords_in_text = text.downcase.scan(/[[:alnum:][-]]{3,}/).select { |word| 
    keywords_hash.has_key? word 
}.uniq 

即使當要搜索的文本和有效關鍵字列表都非常大時,這應該是合理有效的。

相關問題