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

What would be a faster way to make a list of all the words of a file?

我想把一个文件的所有单词放到一个列表中。该文件的大小为 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]"))). 

使用 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 倍。在您的数据集上测试这两个函数以验证此方法是否更快。性能会因数据而异。