Elixir:计算韩文字母文本文件中的单词频率

时间:2017-04-07 02:22:33

标签: utf-8 elixir

但我正在处理一些用韩文写的数据。我有一个用于英文txt文件的单词频率脚本,但是当我传递包含Hangul字符的UTF-8 txt文件时脚本失败。具体来说,它似乎基本上将所有字符都读为空格。这是结果,存储在.csv文件中:

, 290668
1, 2
2, 5
3d, 1
4, 1
55, 1
6, 1
6mm, 2
709, 2
710, 1
d, 1
j, 87
k, 1
m, 14
p, 19
pd100, 1
y, 1

考虑到文件中的文本不包含这些字符,这似乎是一个问题。那么如何让我的代码读取hangul?这是我目前的代码:

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
    |> Enum.map(&String.downcase(&1))
  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.open("wordfreqKor.csv", [:write, :utf8], fn(file) ->
      Enum.each(map, &IO.write(file, Enum.join(Tuple.to_list(&1), ", ")<>"\n"))
    end)
  end

end

WordFrequency.wordCount("myfile.txt")

非常感谢您的建议!

0 个答案:

没有答案