Package com.github.pmerienne.trident.ml.nlp

Source Code of com.github.pmerienne.trident.ml.nlp.TwitterSentimentClassifierTridentIntegrationTest

/**
* Copyright 2013-2015 Pierre Merienne
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.pmerienne.trident.ml.nlp;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

import storm.trident.TridentTopology;
import backtype.storm.Config;
import backtype.storm.LocalCluster;
import backtype.storm.LocalDRPC;
import backtype.storm.tuple.Fields;

public class TwitterSentimentClassifierTridentIntegrationTest {

  @Test
  public void testInTopology() throws InterruptedException {
    // Start local cluster
    LocalCluster cluster = new LocalCluster();
    LocalDRPC localDRPC = new LocalDRPC();

    try {
      // Build topology
      TridentTopology toppology = new TridentTopology();

      // Classification stream
      toppology.newDRPCStream("classify", localDRPC)
        // Query classifier with text instance
        .each(new Fields("args"), new TwitterSentimentClassifier(), new Fields("sentiment")).project(new Fields("sentiment"));

      cluster.submitTopology(this.getClass().getSimpleName(), new Config(), toppology.build());
      Thread.sleep(4000);

      // Query with DRPC
      test(false, "RT @JazminBianca: I hate Windows 8. I hate Windows 8. I hate Windows 8.", localDRPC);
      test(false, "I don't like Windows 8, I think it's overrated =))", localDRPC);
      test(false, "Windows 8 is stupid as fuck ! Shit is confusing <<", localDRPC);
      test(false, "not a big fan of Windows 8", localDRPC);
      test(false, "Forever hating apple for changing the chargers #wanks", localDRPC);
      test(false, "#CSRBlast #CSRBlast That moment you pull out a book because the customer service at apple is horrible and takes wa... http://t.co/WxqyGR9a85", localDRPC);

      test(true, "Windows 8 is awesome :D", localDRPC);
      test(true, "God Windows 8 is amazing. Finally", localDRPC);
      test(true, "Register for the AWESOME Windows 8 western US regional events all in the next few weeks! http://t.co/7lfqaHSxfs #w8appfactor @w8appfactor", localDRPC);
      test(true, "Windows 8 is fun to use. I like it better then mac lion.", localDRPC);
      test(true, "Good morning loves 😁😁 apple jacks doe http://t.co/nOfi42enoQ", localDRPC);
      test(true, "@Saad_khan33 No i prefer apple anyday", localDRPC);

    } finally {
      cluster.shutdown();
      localDRPC.shutdown();
    }
  }

  protected static void test(boolean expected, String text, LocalDRPC localDRPC) {
    boolean actual = extractPrediction(localDRPC.execute("classify", text));
    assertEquals("Expecting " + expected + " but was " + actual + " for " + text, expected, actual);
  }

  protected static Boolean extractPrediction(String drpcResult) {
    return Boolean.parseBoolean(drpcResult.replaceAll("\\[", "").replaceAll("\\]", ""));
  }
}
TOP

Related Classes of com.github.pmerienne.trident.ml.nlp.TwitterSentimentClassifierTridentIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.