mirror of
				https://github.com/node-red/node-red.git
				synced 2025-03-01 10:36:34 +00:00 
			
		
		
		
	Remove sentiment from core
(moved to node-red-nodes)
This commit is contained in:
		| @@ -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}); |  | ||||||
|         }); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
| }); |  | ||||||
		Reference in New Issue
	
	Block a user