【问题标题】:Storm and stop words风暴和停止词
【发布时间】:2014-03-12 11:29:48
【问题描述】:

我是storm框架的新手(https://storm.incubator.apache.org/about/integrates.html), 我用我的代码在本地测试,我认为如果我删除停用词,它会表现良好,但我在线搜索,我看不到任何在风暴中删除停用词的示例。

【问题讨论】:

    标签: data-mining apache-storm stop-words topic-modeling


    【解决方案1】:

    如果停用词列表的大小足够小以适合内存,最直接的方法是使用知道该列表的风暴Filter 的实现来简单地过滤元组。这个Filter 可能会每隔一段时间轮询数据库以获取最新的停用词列表,如果此列表随着时间的推移而演变。

    如果停用词列表的大小更大,那么您可以使用QueryFunction,它通过stateQuery 函数从您的拓扑中调用,它会:

    • 接收一批要检查的元组(比如一次 10000 个)
    • 从其内容构建单个查询并在持久性中查找相应的停用词
    • 为每个元组附加一个布尔值,指定每个元组的用途

    + 在此之后添加一个Filter 以根据该布尔值进行过滤。

    如果你喜欢冒险:

    另一种更快的方法是使用bloom filter approximation。我听说Algebird 旨在提供这种功能,并针对 Scalding 和 Storm(这有多酷?),但我不知道它有多稳定,我也没有任何实际将其插入 Storm 的经验(如果下雨,可能是星期天......)。

    此外,Cascading(与 Storm 没有直接关系,但在 map reduce 之上有一组非常相似的原始抽象)在this tutorial 中建议了一种基于左连接的方法。这样的连接存在于 Storm 中,并且正确的分支可能会被提供一个 FixedBatchSpout 每次发出所有停用词,或者甚至是一个自定义的 spout,它每次都从持久性中读取最新版本的停用词列表,所以也许这会也工作?也许?这也假设停用词列表的大小相对较小。

    【讨论】:

      猜你喜欢
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多