mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Remove sentiment from core
(moved to node-red-nodes)
This commit is contained in:
parent
56db1da3cf
commit
746512b8b8
@ -1,57 +0,0 @@
|
|||||||
|
|
||||||
<script type="text/x-red" data-template-name="sentiment">
|
|
||||||
<div class="form-row">
|
|
||||||
<label for="node-input-property"><i class="fa fa-ellipsis-h"></i> <span data-i18n="node-red:common.label.property"></span></label>
|
|
||||||
<input type="text" id="node-input-property" style="width:70%;"/>
|
|
||||||
</div>
|
|
||||||
<div class="form-row">
|
|
||||||
<label for="node-input-name"><i class="fa fa-tag"></i> <span data-i18n="common.label.name"></span></label>
|
|
||||||
<input type="text" id="node-input-name" data-i18n="[placeholder]common.label.name">
|
|
||||||
</div>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/x-red" data-help-name="sentiment">
|
|
||||||
<p>Analyses the chosen property, default <code>payload</code>, and adds a <code>sentiment</code> object.</p>
|
|
||||||
<h3>Outputs</h3>
|
|
||||||
<dl class="message-properties">
|
|
||||||
<dt>sentiment <span class="property-type">object</span></dt>
|
|
||||||
<dd>contains the resulting AFINN-111 sentiment.</dd>
|
|
||||||
<dt>sentiment.score <span class="property-type">number</span></dt>
|
|
||||||
<dd>the sentiment score.</dd>
|
|
||||||
</dl>
|
|
||||||
<h3>Inputs</h3>
|
|
||||||
<dl class="message-properties">
|
|
||||||
<dt>overrides <span class="property-type">object</span></dt>
|
|
||||||
<dd>an object of word score overrides can be supplied - <code>{ word:score,... }</code>.</dd>
|
|
||||||
</dl>
|
|
||||||
<h3>Details</h3>
|
|
||||||
<p>A score greater than zero is positive and less than zero is negative.</p>
|
|
||||||
<p>The score typically ranges from -5 to +5, but can go higher and lower.</p>
|
|
||||||
<p>See <a href="https://github.com/thisandagain/sentiment/blob/master/README.md" target="_blank">the Sentiment docs here</a>.</p>
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
RED.nodes.registerType('sentiment',{
|
|
||||||
category: 'analysis-function',
|
|
||||||
color:"#E6E0F8",
|
|
||||||
defaults: {
|
|
||||||
name: {value:""},
|
|
||||||
property: {value:"payload",required:true}
|
|
||||||
},
|
|
||||||
inputs:1,
|
|
||||||
outputs:1,
|
|
||||||
icon: "arrow-in.png",
|
|
||||||
label: function() {
|
|
||||||
return this.name||"sentiment";
|
|
||||||
},
|
|
||||||
labelStyle: function() {
|
|
||||||
return this.name?"node_label_italic":"";
|
|
||||||
},
|
|
||||||
oneditprepare: function() {
|
|
||||||
if (this.property === undefined) {
|
|
||||||
$("#node-input-property").val("payload");
|
|
||||||
}
|
|
||||||
$("#node-input-property").typedInput({default:'msg',types:['msg']});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
@ -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);
|
|
||||||
}
|
|
@ -6,7 +6,8 @@
|
|||||||
"name": "Name",
|
"name": "Name",
|
||||||
"username": "Username",
|
"username": "Username",
|
||||||
"password": "Password",
|
"password": "Password",
|
||||||
"property": "Property"
|
"property": "Property",
|
||||||
|
"language": "Language"
|
||||||
},
|
},
|
||||||
"status": {
|
"status": {
|
||||||
"connected": "connected",
|
"connected": "connected",
|
||||||
|
@ -60,6 +60,7 @@
|
|||||||
"node-red-node-email": "0.1.*",
|
"node-red-node-email": "0.1.*",
|
||||||
"node-red-node-feedparser": "0.1.*",
|
"node-red-node-feedparser": "0.1.*",
|
||||||
"node-red-node-rbe": "0.2.*",
|
"node-red-node-rbe": "0.2.*",
|
||||||
|
"node-red-node-sentiment": "^0.1.0",
|
||||||
"node-red-node-twitter": "*",
|
"node-red-node-twitter": "*",
|
||||||
"nopt": "4.0.1",
|
"nopt": "4.0.1",
|
||||||
"oauth2orize": "1.11.0",
|
"oauth2orize": "1.11.0",
|
||||||
@ -70,7 +71,6 @@
|
|||||||
"raw-body": "2.3.3",
|
"raw-body": "2.3.3",
|
||||||
"request": "2.87.0",
|
"request": "2.87.0",
|
||||||
"semver": "5.5.0",
|
"semver": "5.5.0",
|
||||||
"sentiment": "2.1.0",
|
|
||||||
"uglify-js": "3.3.25",
|
"uglify-js": "3.3.25",
|
||||||
"when": "3.7.8",
|
"when": "3.7.8",
|
||||||
"ws": "1.1.5",
|
"ws": "1.1.5",
|
||||||
|
@ -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});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
Loading…
Reference in New Issue
Block a user