From e33174699446ff64a6e3cea4eb1114469469bd5a Mon Sep 17 00:00:00 2001 From: moos Date: Tue, 8 Dec 2020 19:41:34 -0800 Subject: [PATCH] Fix #41 --- CHANGELOG.md | 7 +- bin/wordpos-cli.js | 1 - package.json | 2 +- src/common.js | 4 +- src/util.js | 2 +- test/cli_test.js | 172 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 182 insertions(+), 6 deletions(-) create mode 100644 test/cli_test.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 564de13..a825561 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ -**2.0.0** + +2.1.0 + - Fix CLI script when used without specific POS (#41) + - :boom: Stopwords are now case-insensitive, i.e., "The", "And", "Him", etc. are all filtered out. + +2.0.0 - Support for running wordpos in the **browser** (no breaking change for node environment) - Dropped support for node 4.x. diff --git a/bin/wordpos-cli.js b/bin/wordpos-cli.js index 6efaff1..b4443d6 100755 --- a/bin/wordpos-cli.js +++ b/bin/wordpos-cli.js @@ -269,4 +269,3 @@ function sprint(results) { },''); } } - diff --git a/package.json b/package.json index e1bf29e..a33c82b 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wordpos", - "version": "2.0.0", + "version": "2.1.0", "description": "wordpos is a set of part-of-speech utilities for Node.js & browser using the WordNet database.", "author": "Moos ", "keywords": [ diff --git a/src/common.js b/src/common.js index 35b45d7..066dab4 100644 --- a/src/common.js +++ b/src/common.js @@ -160,12 +160,12 @@ function get(isFn) { words = this.parse(text), results = [], self = this, - first = words.shift(); + first = words[0]; // test one first & check for error, otherwise // map is inoccuous to errors! return exec(first) - .then(() => Promise.all(words.map(exec))) + .then(() => Promise.all(words.slice(1).map(exec))) .then(done) .catch(err => { // done(); // callback signature is same! // FIXME diff --git a/src/util.js b/src/util.js index 2b72dfd..a33a8e2 100644 --- a/src/util.js +++ b/src/util.js @@ -33,7 +33,7 @@ function normalize(word) { } function isStopword(stopwordsStr, word) { - return stopwordsStr.indexOf(' '+word+' ') >= 0; + return stopwordsStr.indexOf(' '+ word.toLowerCase() +' ') >= 0; } function tokenizer(str) { diff --git a/test/cli_test.js b/test/cli_test.js new file mode 100644 index 0000000..e34a3f6 --- /dev/null +++ b/test/cli_test.js @@ -0,0 +1,172 @@ +/** + * cli_test.js + * + * Test CLI script + * + * Copyright (c) 2012-2020 mooster@42at.com + * https://github.com/moos/wordpos + * + * Released under MIT license + */ + +var + chai = require('chai'), + assert = chai.assert, + exec = require('child_process').exec, + testStr = 'The angry bear chased the frightened little squirrel', + cmd = 'node ' + __dirname + '/../bin/wordpos-cli ', + gDone; + +// compare two list of words independent of word order +function cmp(act, exp) { + assert.equal(act.trim().split(' ').sort().join(), exp.split(' ').sort().join()); +} + + +describe('CLI tests', function() { + this.slow(300); + + describe('Test CLI get', function() { + it('should get nouns', done => { + exec(cmd + '-n -b get ' + testStr, (error, stdout) => { + assert.isNull(error); + cmp(stdout, 'bear chased squirrel little'); + done(); + }); + }); + + it('should get adjectives', done => { + exec(cmd + '-a -b get ' + testStr, (error, stdout) => { + assert.isNull(error); + cmp(stdout, 'angry frightened little'); + done(); + }); + }); + + it('should get verbs', done => { + exec(cmd + '-v -b get ' + testStr, (error, stdout) => { + assert.isNull(error); + cmp(stdout, 'bear'); + done(); + }); + }); + + it('should get adverbs', done => { + exec(cmd + '-r -b get ' + testStr, (error, stdout) => { + assert.isNull(error); + cmp(stdout, 'little'); + done(); + }); + }); + + it('should get POS', done => { + exec(cmd + '-b get ' + testStr, (error, stdout, stderr) => { + assert.isNull(error); + assert.equal(stdout.trim(), + 'bear chased little squirrel \n' + + 'angry frightened little \n' + + 'bear \n' + + 'little'); + done(); + }); + }); + + it('should get POS (single word)', done => { + exec(cmd + '-b get angry', (error, stdout, stderr) => { + assert.isNull(error); + assert.equal(stdout.trim(), 'angry'); + done(); + }); + }); + + it('should get counts', done => { + exec(cmd + '-b -c get ' + testStr, (error, stdout, stderr) => { + assert.isNull(error); + assert.equal(stdout.trim(), '4 3 1 1 6'); + done(); + }); + }); + }); + + describe('Test CLI def', function() { + it('should define word', done => { + exec(cmd + 'def angry', (error, stdout) => { + assert.isNull(error); + assert(stdout.trim().startsWith('angry (def)\n a: feeling or showing anger;')); + done(); + }); + }); + }); + + describe('Test CLI syn', function() { + it('should get synonyms', done => { + exec(cmd + 'syn angry', (error, stdout) => { + assert.isNull(error); + assert(stdout.trim().startsWith('angry (syn)\n a: angry')); + done(); + }); + }); + }); + + describe('Test CLI exp', function() { + it('should get exmpale', done => { + exec(cmd + 'exp angry', (error, stdout) => { + assert.isNull(error); + assert(stdout.trim().startsWith('angry (exp)\n a: "angry at the weather"')); + done(); + }); + }); + }); + + describe('Test CLI seek', function() { + it('should seek by offset', done => { + exec(cmd + '-a seek 00114629', (error, stdout) => { + assert.isNull(error); + assert(/lemma/.test(stdout), 'found lemma'); + assert(/angry/.test(stdout), 'found angry'); + done(); + }); + }); + }); + + describe('Test CLI rand', function() { + it('should get a random word', done => { + exec(cmd + 'rand', (error, stdout) => { + assert.isNull(error); + assert(stdout.length > 1, 'got answer') + done(); + }); + }); + + it('should get a random word starting with...', done => { + exec(cmd + '-b rand angr', (error, stdout) => { + assert.isNull(error); + assert.equal(stdout.substr(0,4), 'angr'); + done(); + }); + }); + }); + + describe('Test CLI parse', function() { + it('should parse input', done => { + exec(cmd + '-b parse ' + testStr, (error, stdout) => { + assert.isNull(error); + assert.equal(stdout.trim(), 'angry bear chased frightened little squirrel'); + done(); + }); + }); + }); + + describe('Test CLI stopwords', function() { + let WordPOS = require('../src/wordpos'); + + it('should list stopwords', done => { + exec(cmd + '-j stopwords ' + testStr, (error, stdout) => { + assert.isNull(error); + assert.equal(stdout.trim(), JSON.stringify(WordPOS.stopwords)); + done(); + }); + }); + }); + +});