文本分类预定义类别与包含Omnicat-bayes的文档

时间:2016-12-24 14:35:22

标签: ruby-on-rails naivebayes

我使用 final String json = jsonObject.toString(); final OutputStream out = new conn.getOutputStream(); out.write(json.getBytes("UTF-8")); out.flush(); out.close(); 分析文档(文本分类)。有了这个宝石,我就可以创建类别和#34; feed"有文件的人。目前,这些类别有足够的文件,以便足够好"识别应该放在哪个类别的新文件。

现在,在我的文档控制器下,创建操作只需几步。

  1. 创建新的贝叶斯实例
  2. 创建将使用的类别
  3. 采取预先文件来训练类别
  4. 实际上培训类别
  5. (所有这些步骤均在omnicat-bayes函数下)

    创建操作:

    run_all

    def create @document = Document.new(document_params) @document.case_id = @case.id if @document.save run_all # Running the classify function on reden aanmelding classify_one = @bayes.classify(@document.reden_aanmelding) document_category = classify_one.to_hash[:top_score_key] # Updating the document category by the top key returned by Bayes @document.update_attribute(:category, document_category) finding_required_records # Training Cees Buddy with the document that got saved @bayes.train(document_category, @document.reden_aanmelding) redirect_to case_path(@case) else render :new end end run_all函数内部(我知道这不是最好的做法)我创建了上面提到的四个步骤。

    现在,在创建函数完成后,贝叶斯实例消失了,现在AI已经是#34;愚蠢的"再说呢。

    我的问题是:什么是合适的地方,如何实现这一目标来创建新实例,新类别并使用我的数据库中的文档提供它们。这里@document.save会有趣吗?

1 个答案:

答案 0 :(得分:1)

这是一个非常棘手的问题,因为您可能希望扩展应用程序以处理多个文档。

问题在于,生产模式Rails应用程序Web服务器通常会分叉到多个进程,甚至可以在多台计算机上运行。这意味着即使您使用单例模式,在一个过程中训练的文档在所有其他过程中也是未知的。

因此,仅使用omnicat-bayes gem,最好的方法是创建某种独立的微服务,该服务在其自己的进程中运行,并且只执行处理文档。然后,主应用程序应该将处理排入异步作业,因此如果培训过程忙于其他文档,则可能需要更长的时间。

如何与此外部OmniCat实例进行通信取决于您。最舒服的方式可能是dRuby,但我应该补充一点,我没有生产模式经验。更加面向未来的解决方案是使用一些简单的HTTP + JSON。在这种情况下,您甚至可以使用一些更强大的库来切换出进行培训和分类的服务,该库将来不会基于Ruby。