制作文件所有单词列表的更快捷方法是什么?

时间:2017-07-26 16:20:07

标签: erlang file-read

我想将文件中的所有单词都放入列表中。文件大小为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]"))). 

1 个答案:

答案 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倍。测试数据集上的两个函数以验证此方法更快。效果会因数据而异。