diff --git a/nodes/core/analysis/72-sentiment.html b/nodes/core/analysis/72-sentiment.html
deleted file mode 100644
index 0ba1ccade..000000000
--- a/nodes/core/analysis/72-sentiment.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
diff --git a/nodes/core/analysis/72-sentiment.js b/nodes/core/analysis/72-sentiment.js
deleted file mode 100644
index ff0cf33e8..000000000
--- a/nodes/core/analysis/72-sentiment.js
+++ /dev/null
@@ -1,23 +0,0 @@
-
-module.exports = function(RED) {
- "use strict";
- var sentiment = require('sentiment');
-
- function SentimentNode(n) {
- RED.nodes.createNode(this,n);
- this.property = n.property||"payload";
- var node = this;
-
- this.on("input", function(msg) {
- var value = RED.util.getMessageProperty(msg,node.property);
- if (value !== undefined) {
- sentiment(value, msg.overrides || null, function (err, result) {
- msg.sentiment = result;
- node.send(msg);
- });
- }
- else { node.send(msg); } // If no matching property - just pass it on.
- });
- }
- RED.nodes.registerType("sentiment",SentimentNode);
-}
diff --git a/nodes/core/locales/en-US/messages.json b/nodes/core/locales/en-US/messages.json
index d59f3d1bf..079e64da9 100644
--- a/nodes/core/locales/en-US/messages.json
+++ b/nodes/core/locales/en-US/messages.json
@@ -6,7 +6,8 @@
"name": "Name",
"username": "Username",
"password": "Password",
- "property": "Property"
+ "property": "Property",
+ "language": "Language"
},
"status": {
"connected": "connected",
diff --git a/package.json b/package.json
index be2fec970..3c5a1c6c6 100644
--- a/package.json
+++ b/package.json
@@ -60,6 +60,7 @@
"node-red-node-email": "0.1.*",
"node-red-node-feedparser": "0.1.*",
"node-red-node-rbe": "0.2.*",
+ "node-red-node-sentiment": "^0.1.0",
"node-red-node-twitter": "*",
"nopt": "4.0.1",
"oauth2orize": "1.11.0",
@@ -70,7 +71,6 @@
"raw-body": "2.3.3",
"request": "2.87.0",
"semver": "5.5.0",
- "sentiment": "2.1.0",
"uglify-js": "3.3.25",
"when": "3.7.8",
"ws": "1.1.5",
diff --git a/test/nodes/core/analysis/72-sentiment_spec.js b/test/nodes/core/analysis/72-sentiment_spec.js
deleted file mode 100644
index d2272f7b3..000000000
--- a/test/nodes/core/analysis/72-sentiment_spec.js
+++ /dev/null
@@ -1,178 +0,0 @@
-/**
- * Copyright JS Foundation and other contributors, http://js.foundation
- *
- * 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.
- **/
-
-var should = require("should");
-var sentimentNode = require("../../../../nodes/core/analysis/72-sentiment.js");
-var helper = require("node-red-node-test-helper");
-
-describe('sentiment Node', function() {
-
- before(function(done) {
- helper.startServer(done);
- });
-
- after(function(done) {
- helper.stopServer(done);
- });
-
- afterEach(function() {
- helper.unload();
- });
-
- it('should be loaded', function(done) {
- var flow = [{id:"sentimentNode1", type:"sentiment", name: "sentimentNode" }];
- helper.load(sentimentNode, flow, function() {
- var sentimentNode1 = helper.getNode("sentimentNode1");
- sentimentNode1.should.have.property('name', 'sentimentNode');
- done();
- });
- });
-
- it('should pass on msg if no payload', function(done) {
- var flow = [{id:"jn1",type:"sentiment",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- msg.should.not.have.property('sentiment');
- msg.topic.should.equal("pass on");
- done();
- });
- var testString = 'good, great, best, brilliant';
- jn1.receive({topic:"pass on"});
- });
- });
-
- it('should add a positive score for good words', function(done) {
- var flow = [{id:"jn1",type:"sentiment",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- try {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.be.above(10);
- done();
- } catch(err) {
- done(err);
- }
- });
- var testString = 'good, great, best, brilliant';
- jn1.receive({payload:testString});
- });
- });
-
- it('should add a positive score for good words - alternative property', function(done) {
- var flow = [{id:"jn1",type:"sentiment",property:"foo",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- try {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.be.above(10);
- done();
- } catch(err) {
- done(err);
- }
- });
- var testString = 'good, great, best, brilliant';
- jn1.receive({foo:testString});
- });
- });
-
- it('should add a negative score for bad words', function(done) {
- var flow = [{id:"jn1",type:"sentiment",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.be.below(-10);
- done();
- });
- var testString = 'bad, horrible, negative, awful';
- jn1.receive({payload:testString});
- });
- });
-
- it('should add a negative score for bad words - alternative property', function(done) {
- var flow = [{id:"jn1",type:"sentiment",property:"foo",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.be.below(-10);
- done();
- });
- var testString = 'bad, horrible, negative, awful';
- jn1.receive({foo:testString});
- });
- });
-
- it('should allow you to override word scoring', function(done) {
- var flow = [{id:"jn1",type:"sentiment",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.equal(20);
- done();
- });
- var testString = 'sick, wicked';
- var overrides = {'sick': 10, 'wicked': 10 };
- jn1.receive({payload:testString,overrides:overrides});
- });
- });
-
- it('should allow you to override word scoring - alternative property', function(done) {
- var flow = [{id:"jn1",type:"sentiment",property:"foo",wires:[["jn2"]]},
- {id:"jn2", type:"helper"}];
- helper.load(sentimentNode, flow, function() {
- var jn1 = helper.getNode("jn1");
- var jn2 = helper.getNode("jn2");
- jn2.on("input", function(msg) {
- msg.should.have.property('sentiment');
- msg.sentiment.should.have.property('score');
- msg.sentiment.score.should.be.a.Number();
- msg.sentiment.score.should.equal(20);
- done();
- });
- var testString = 'sick, wicked';
- var overrides = {'sick': 10, 'wicked': 10 };
- jn1.receive({foo:testString,overrides:overrides});
- });
- });
-
-});