我有一個文本文件大小爲300MB,我想計算文件中每個10,000個子字符串的出現次數。我想知道如何快速做到這一點。如何用Ruby快速計算字符串中子字符串的出現次數
現在,我使用下面的代碼:
content = IO.read("path/to/mytextfile")
Word.each do |w|
w.occurrence = content.scan(w.name).size
w.save
end
字是ActiveRecord類。
我花了差不多1天時間完成計算。無論如何要做得更快?謝謝。
編輯1: 再次感謝您。我正在運行rails 2.3.9。 name
字段表中包含我正在搜索的內容,並且它僅包含唯一值。而不是使用Word.each
,我使用批次(每次1000行)加載。它應該有所幫助。
我用bpaulon的思想重新編寫了整個代碼。現在只需要幾個小時就可以完成計數。
我異型新版本的代碼,現在最大的時間成本計算方法是UTF8編碼支持的字符串截斷碼
def truncate(n)
self.slice(/\A.{0,#{n}}/m)
end
和字符計數代碼
def utf8_length
self.unpack('U*').size
end
任何其他更快的方法來替代它們?
那麼你總是可以分割文件,並在單線程中掃描它... – bpaulon 2011-06-17 02:28:52
這些子字符串總是以空格分隔嗎?或者它們中的一些可以包含空格? – Nemo157 2011-06-17 03:00:38
不以空格分隔。有些可能包含空格。 – yang 2011-06-17 03:08:20