带有分类器gem的无效编码符号

时间:2012-06-19 20:30:55

标签: ruby-on-rails ruby

当我向Postgres数据库添加项目时,一切似乎都运行良好。在不改变任何内容的情况下,只要我的应用程序中的任何地方启动Madeleine,我的Rails应用就会失败:

EncodingError in EventsController#update
  invalid encoding symbol
  app/controllers/events_controller.rb:137:in `update'

137是问题:

135 def update
136   @event = Event.find(params[:id])
137   m = SnapshotMadeleine.new("bayes_data")
      ....
    end
但是,我能够在控制台中对事物进行分类,这是导致我混淆的一部分。在控制台中,这很好用:

m = SnapshotMadeleine.new("bayes_data") {}
   => #<Madeleine::DefaultSnapshotMadeleine:0x000...
m.system
   => #<Classifier::Bayes:0x000...
m.system.classify "test"

我正在使用Madeleine的最新分类器宝石。

我认为我的快照中有些东西在尝试加载时已损坏,所以我删除了它,但这并没有解决问题。这是我的倒数第二个快照(现在是最新的快照):

a = File.read('bayes_data/000000000000000000041.snapshot')
a.encoding
   => #<Encoding:UTF-8>
a.valid_encoding?
   => true

不确定这里发生了什么。我看到一些Ruby 1.9.3-p125的人有类似的问题,所以我升级到最新的稳定版本1.9.3-p194,但这也没有帮助。

以下是分类器文档的链接,其中提到了如何使用Madeleine:http://classifier.rubyforge.org/

我非常感谢能够深入了解这里发生的事情。谢谢!

3 个答案:

答案 0 :(得分:0)

我的rails_admin gem有一个问题,mysql适配器没有编码意识,也许你可以检查你的postgres adaptar是否是,如果没有尝试另一个

答案 1 :(得分:0)

我不知道为什么标准的Marshal类不起作用,但我使用

取得了不错的成绩
m = SnapshotMadeleine.new("bayes_data", YAML) do 
  b = Classifier::Bayes.new "Positive", "Negative
end

然后

m = SnapshotMadeleine.new("bayes_data", YAML)
元帅打破了什么?不太确定。

答案 2 :(得分:0)

您必须确保用于训练数据的字符串是UTF-8编码的。如果您正在训练数据集,那么丑陋的黑客就是

Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

在你的剧本中。