我有一个文本文件大小为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