我想将文件中的所有单词都放入列表中。文件大小为6.3 MB,仅包含约100万字。 这是我实现的,制作列表大约需要3.5秒。 任何更快的方法?
readfile(FileName) -> {ok,Binary} = file:read_file(FileName),
lists:map(fun(X) -> string:to_lower(binary_to_list(X)) end,(re:split(binary_to_list(Binary),"[^a-zA-Z]"))).
答案 0 :(得分:0)
使用string:tokens/2
的东西会更快:
readfile(Filename) ->
Words = string:tokens(binary_to_list(Bin), " \t\r\n"),
lists:map(fun(Word) -> string:to_lower(Word) end, Words).
第二个参数是要拆分的字符列表。如果要拆分其他类型的控制字符,请参阅Erlang data_types page for the complete list。
在我的简单测试中,这个功能快了近5倍。测试数据集上的两个函数以验证此方法更快。效果会因数据而异。