我有一個很大的文本字符串和大約200個要從文本中過濾掉的關鍵字。Ruby:根據文字數組過濾掉文本中的關鍵字的快速方法
有許多方法待辦事項這一點,但我卡上的方式是最好的:
1)使用for循環與GSUB爲每個關鍵字
3)使用一個巨大的正則表達式
任何其他的想法,你會傢伙建議
我有一個很大的文本字符串和大約200個要從文本中過濾掉的關鍵字。Ruby:根據文字數組過濾掉文本中的關鍵字的快速方法
有許多方法待辦事項這一點,但我卡上的方式是最好的:
1)使用for循環與GSUB爲每個關鍵字
3)使用一個巨大的正則表達式
任何其他的想法,你會傢伙建議
一個巨大的正則表達式是更快它會走路的文本只有一次。
此外,如果您不需要文本,只有單詞,最後,您可以使文本成爲一組downcased的單詞,然後刪除過濾器數組中的單詞。但是這隻有在最後不需要「文本」纔有意義(通常用於標籤或全文搜索)時纔有效。
用每個有效的關鍵字作爲關鍵字創建一個散列。
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
即使當要搜索的文本和有效關鍵字列表都非常大時,這應該是合理有效的。