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
Enums Elixir:Enum.EmptyError将列表传递给Senient库_Enums_Elixir - Fatal编程技术网

Enums Elixir:Enum.EmptyError将列表传递给Senient库

Enums Elixir:Enum.EmptyError将列表传递给Senient库,enums,elixir,Enums,Elixir,我试图通过将每个句子传递到外部库Sentient中的analyze函数来对一部小说进行情感分析。我反复遇到以下错误: (Enum.EmptyError) empty error (elixir) lib/enum.ex:1590: Enum.reduce/2 (elixir) lib/enum.ex:1184: Enum."-map/2-lists^map/1-0-"/2 (sentiment) lib/sentiment.ex:23: Sentiment.analyze/1 (sentimen

我试图通过将每个句子传递到外部库Sentient中的analyze函数来对一部小说进行情感分析。我反复遇到以下错误:

(Enum.EmptyError) empty error
(elixir) lib/enum.ex:1590: Enum.reduce/2
(elixir) lib/enum.ex:1184: Enum."-map/2-lists^map/1-0-"/2
(sentiment) lib/sentiment.ex:23: Sentiment.analyze/1
(sentiment) lib/sentiment.ex:6: Sentiment.run/1
(stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
(elixir) lib/code.ex:168: Code.eval_string/3
据我所知,我并没有向函数传递空字符串。我一直在使用一个包含以下内容的测试文件:

This is a test. This sentence is sad. This sentence is happy. The end.
这是我的代码:

defmodule Sentiment do

  def run(file) do
    file
    |> fileread
    |> analyze
    |>IO.inspect
  end

  def fileread(file) do
    file
    |> File.stream!
    |> Stream.map(&String.trim_trailing(&1))
    |> Enum.map(&String.replace(&1, ~r/[-@#$%^&*()=_+|;':",<>']/, ""))
    |> Stream.map(&String.split(&1,~r/[\p{P}\p{S}]+/, trim: true))
    |> Enum.to_list
    |> List.flatten
    |> IO.inspect
  end

  def analyze(list) do
    list
    |> Enum.map(&Sentient.analyze(&1))
    |> IO.inspect
  end

end

所以,我真的不知道为什么会出现这个错误。有人有什么建议吗?

这是有意识的
中的一个错误:

$ mix run -e 'Sentient.analyze("This is a test")'
** (Enum.EmptyError) empty error
    (elixir) lib/enum.ex:1722: Enum.reduce/2
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/code.ex:170: Code.eval_string/3
    (elixir) lib/enum.ex:645: Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:645: Enum.each/2
    (mix) lib/mix/tasks/run.ex:78: Mix.Tasks.Run.run/1
它看起来像是作者在Git回购中发布的,但从未在hex.pm上发布过。对于当前git版本,上述语句不会引发任何错误


错误在于,旧版本正在使用空列表调用
Enum.reduce/2
,如果列表为空,则记录该列表以引发该错误。他们将其更改为
Enum.reduce/3
,在前面链接的提交中使用默认的累加器值,该值可以很好地处理空列表。

根据堆栈跟踪判断,
Enum.EmptyError
似乎是由
Enum.map/2
而不是由
sencent.analyze(&1)
引发的。您是否100%肯定
analyze/1
中的
list
是您在问题中显示的数组列表?我假设是这样,因为我只是调用run函数,它只是将文件导入fileread/1函数,然后将结果导入analyze/1。您使用的是哪个版本的Elixir?(我正在努力理解stacktrace。)我正在运行1.3.4,谢谢!你能在
iex-S mix
中手动调用这四个句子中的每一个吗?有没有错误?谢谢,这太棒了!
$ mix run -e 'Sentient.analyze("This is a test")'
** (Enum.EmptyError) empty error
    (elixir) lib/enum.ex:1722: Enum.reduce/2
    (stdlib) erl_eval.erl:670: :erl_eval.do_apply/6
    (elixir) lib/code.ex:170: Code.eval_string/3
    (elixir) lib/enum.ex:645: Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:645: Enum.each/2
    (mix) lib/mix/tasks/run.ex:78: Mix.Tasks.Run.run/1