Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Utf 8 长生不老药:用韩语字母计算文本文件中单词的频率_Utf 8_Elixir - Fatal编程技术网

Utf 8 长生不老药:用韩语字母计算文本文件中单词的频率

Utf 8 长生不老药:用韩语字母计算文本文件中单词的频率,utf-8,elixir,Utf 8,Elixir,但我正在处理一些用韩语写的数据。我有一个用于英文txt文件的词频脚本,但当我传递一个包含韩文字符的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 考虑到文件中的文本不包含这些字符,这似乎是一个问题。那么,我如何让我的代码

但我正在处理一些用韩语写的数据。我有一个用于英文txt文件的词频脚本,但当我传递一个包含韩文字符的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
考虑到文件中的文本不包含这些字符,这似乎是一个问题。那么,我如何让我的代码读成韩文呢?这是我当前的代码:

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")
defmodule WordFrequency do
def字数(读取文件)do
读取文件
|>言语
|>计数
|>tocsv
结束
defp单词(文件)do
文件
|>File.stream!
|>Stream.map(&String.trim_training(&1))
|>Stream.map(&String.split(&1,~r{[^A-Za-z0-9}))
|>枚举到列表
|>列表。展平
|>Enum.map(&String.downcase(&1))
结束
defp计数(单词)何时为列表(单词)do
Enum.reduce(字、%{}、&update_count/2)
结束
defp更新计数(字、acc)do
Map.update acc,String.to_atom(word),1和(&1+1)
结束
降速tocsv(map)do
打开(“wordfreqKor.csv”[:write,:utf8],fn(文件)->
Enum.each(映射和IO.write(文件、Enum.join(Tuple.to_list(&1)、“,”)\n”))
(完)
结束
结束
WordFrequency.wordCount(“myfile.txt”)

非常感谢你的建议

由于您没有提供实际输入,我只能猜测,但问题似乎是您正在拆分的正则表达式。尝试使用
~r/\s+/
进行拆分。