storm apache
实时情感分析是指处理自然语言文本(或语音)流以提取主观信息。 琐碎的用例用于构建推荐引擎或查找社交媒体趋势。
我选择了Apache Storm作为实时处理引擎。 Storm非常强大(我们正在生产中使用它),并且非常容易在其之上实现自定义逻辑。
我编写了一个非常简单的项目( 源代码 ),该项目可以实时进行情感分析(使用随机句子作为输入数据)。 范围是获取随机句子作为输入,然后执行一些情感分析。 最终确定当前句子的分数是正还是负,并保持结果。
实现逻辑如下:
- (虚拟喷口)带有随机句子的Feed管道。
- (加粗螺栓)阻止任何对计分无用的单词。 创建一个不包含无用词(例如文章)的新句子,并将其传递给下一个组件。
- (正计分)获得句子(修饰的)句子并提供正分。
- (负计分螺栓)获得句干并提供负分。
- (最终计分螺栓)比较正负分数,并确定此句子是正数还是负数。
- (持久性螺栓)持久化处理的数据:
原始句子,修改句子以及最终分数,正负分数
作为持久性存储,我选择了Apache HBase (仅供参考),它以批处理模式存储事件。 使用Storm(Tick Tuple)的内部触发机制,每1秒触发一次批量持久性(可配置)。 除了HBase之外,我们还可以轻松使用Redis,Cassandra,MongoDB或Elasticsearch(所有这些对于此用例均有效)。
每个词干和计分螺栓都使用内存数据库中的虚拟对象,其中包含可以用来对每个句子进行评分/加法的所有相对单词。
为了在单个节点或集群中运行此示例,可以使用Storm项目Flux 。 整个拓扑管道是使用单个配置文件( topology.yaml )定义的。
示例运行:
Local execution:
storm jar target/sentiment-analysis-storm-0.0.1-SNAPSHOT.jar org.apache.storm.flux.Flux --local src/test/resources/flux/topology.yaml -s 10000Cluster execution:
storm jar target/sentiment-analysis-storm-0.0.1-SNAPSHOT.jar org.apache.storm.flux.Flux --remote src/test/resources/flux/topology.yaml --c nimbus.host=localhost
另外,有一个简单的JUnit测试( SentimentAnalysisTopologyTest ),该测试在本地执行相同的拓扑。
您可以查看自述文件以了解详细信息。 至于先决条件,您可以检查我的最新帖子 ,以安装单个本地HBase实例和带有2个Workers的本地Storm集群。
这是使用Apache Storm进行情感分析的一种非常简单的方法。 我希望有更多的空闲时间来撰写新文章,并提供用于情感分析的切实可行的解决方案。
翻译自: https://www.javacodegeeks.com/2015/12/real-time-sentiment-analysis-example-apache-storm.html
storm apache