package storm.starter.bolt;
import backtype.storm.task.OutputCollector;
import backtype.storm.task.TopologyContext;
import backtype.storm.topology.BasicOutputCollector;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.topology.base.BaseBasicBolt;
import backtype.storm.topology.base.BaseRichBolt;
import backtype.storm.tuple.Tuple;
import backtype.storm.tuple.Fields;
import backtype.storm.tuple.Values;
import org.apache.commons.lang3.StringUtils;
import storm.starter.spout.NewTwitterSpout;
import java.util.Map;
import java.util.StringTokenizer;
public class HashTagExtractionBolt extends BaseRichBolt {
private OutputCollector _collector;
@Override
public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
_collector = outputCollector;
}
@Override
public void execute(Tuple tuple) {
String text = tuple.getStringByField(NewTwitterSpout.MESSAGE);
StringTokenizer st = new StringTokenizer(text);
System.out.println("---- Split by space ------");
while (st.hasMoreElements()) {
String term = (String) st.nextElement();
if (StringUtils.startsWith(term, "#")){
System.out.println("Found Hashtag: " + term);
_collector.emit(new Values(term, 1.0));
}
}
// Confirm that this tuple has been treated.
_collector.ack(tuple);
}
@Override
public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
outputFieldsDeclarer.declare(new Fields("entity"));
}
@Override
public void cleanup() {
super.cleanup();
}
}