【发布时间】:2017-03-30 22:12:51
【问题描述】:
我在这个问题上摸不着头脑已经有一段时间了。我正在尝试编写一个程序,将给定文本文件中每个单词的频率输出到 .csv 文件。我已经成功地创建了查找每个单词的频率并将其结果输出为地图的函数,但是我的 tocsv 函数出于某种原因将结果写为 Stream 结果,我无法弄清楚为什么或如何避免这种情况。这是我的代码:
defmodule WordFrequency do
def wordCount(readFile) do
readFile
|> words
|> count
|> tocsv
end
defp words(file) do
file
|> File.stream!
|> Stream.map(&String.trim_trailing(&1))
|> Stream.map(&String.split(&1,~r{[^A-Za-z0-9_]}))
|> Enum.to_list
|> List.flatten
end
defp count(words) when is_list(words) do
Enum.reduce(words, %{}, &update_count/2)
end
defp update_count(word, acc) do
Map.update acc, String.to_atom(word), 1, &(&1 + 1)
end
defp tocsv(map) do
file = File.open!("test.csv", [:write, :utf8])
map
|> IO.inspect
|> Enum.map(&CSV.encode(&1))
|> Enum.each(&IO.inspect(file, &1, []))
end
end
count(它是一个测试文件)的结果是:
bitterness: 1, fan: 1, respiration: 1, radiator: 1, ceiling: 1, run: 1,
duck: 1, roundess: 1, terrorism: 1, she: 1, over: 1, equipment: 2, test: 1,
freshness: 1, feminism: 1, bucket: 1, goodness: 1, manliness: 1,
reflection: 1, uncomfortable: 1, tourism: 1, house: 1, ableism: 1, stairs: 1,
heroism: 1, sadness: 1, socialism: 1, fruit: 1, dogs: 1, mechanism: 1,
symbolism: 1, predilection: 1, up: 1, sedition: 1, faithfulness: 1,
fruition: 1, criticism: 1, conformation: 1, extradition: 1, braveness: 1,
ionization: 1, indigestion: 1, bubble: 1, introspection: 1, liquid: 1,
apartment: 1, deep: 1, department: 1, centralization: 1, bitter: 1, ...}
所以我知道我没有将流传递给我的 tocsv 函数,但是在 tocsv 中发生了一些事情,将其转换为流并且在输出到 csv 文件之前不会将其转换为可写格式。任何人都知道我该如何解决这个问题?我正在使用这个 CSV 模块:https://github.com/beatrichartz/csv
谢谢!
【问题讨论】: