• Stars
    star
    211
  • Rank 186,867 (Top 4 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 9 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A module for node.js and the browser that takes in text and strips it of stopwords

stopword

stopword is a module for node and the browser that allows you to strip stopwords from an input text. Covers 62 languages. In natural language processing, "Stopwords" are words that are so frequent that they can safely be removed from a text without altering its meaning.

All .min minified files are approximately 130 Kb each.

NPM version NPM downloads jsDelivr downloads Build Status JavaScript Style Guide MIT License

wonderful day stopword module

Live stopword browser demo

Breaking change!

Language codes are changed from ISO-639-1 (two characters) to ISO-639-3 (three characters). This to have room for more small languages that wasn't specified in ISO-639-1.

If you haven't specified any stopword lists and just gone with the default (which is English), it should continue working without the need for any change.

Getting the script in your environment

CJS - CommonJS

Deconstruction require:

const { removeStopwords, eng, fra } = require('stopword')
// 'removeStopwords', 'eng' and 'fra' available

Old style require:

const sw = require('stopword')
// sw.removeStopwords and sw.<language codes> now available

ESM - Ecmascript Modules

Deconstruction import:

import { removeStopwords, eng, fra } from './dist/stopword.esm.mjs'
// 'removeStopwords', 'eng' and 'fra' available

Old style import:

import * as sw from './dist/stopword.esm.mjs'
// 'sw.removeStopwords' + 'sw.<language codes>' available

UMD - Script tag method

<script src="https://cdn.jsdelivr.net/npm/stopword/dist/stopword.umd.min.js"></script>

<script>
// sw.removeStopwords and sw.<language codes> now available
</script>

TypeScript

TypeScript with CJS

import * as sw from 'stopword'
// 'sw.removeStopwords' + 'sw.<language codes>' available

TypeScript with ESM

import { removeStopwords, eng, fra } from 'stopword'
// 'removeStopwords', 'eng' and 'fra' available

Install TypeScript types

npm i @types/stopword --save-dev

Usage

Default (English)

By default, stopword will strip an array of "meaningless" English words

const { removeStopwords } = require('stopword')
const oldString = 'a really Interesting string with some words'.split(' ')
const newString = removeStopwords(oldString)
// newString is now [ 'really', 'Interesting', 'string', 'words' ]

Other languages

You can also specify a language other than English:

const { removeStopwords, swe } = require('stopword')
const oldString = 'TrΓ€dgΓ₯rdsΓ€gare Γ€r beredda att prΓΆva vad som helst fΓΆr att bli av med de hatade mΓΆrdarsniglarna Γ₯Àâ'.split(' ')
// swe contains swedish stopwords
const newString = removeStopwords(oldString, swe)
// newString is now [ 'TrΓ€dgΓ₯rdsΓ€gare', 'beredda', 'prΓΆva', 'helst', 'hatade', 'mΓΆrdarsniglarna', 'Γ₯Àâ' ]

Numbers

Extract numbers (korean script/characters) with module words-n-numbers and removing 0-9 'stopwords'

const { removeStopwords, _123 } = require('stopword')
const { extract, words, numbers } = require('words-n-numbers')
const oldString = 'μΎ°λ₯Έ λŒ€μ„±λ‹Ή(독일어: KΓΆlner Dom, 정식 λͺ…μΉ­: Hohe Domkirche St. Peter)은 독일 μΎ°λ₯Έμ— μžˆλŠ” 둜마 κ°€ν†¨λ¦­κ΅νšŒμ˜ 성당이닀. κ³ λ”• μ–‘μ‹μœΌλ‘œ μ§€μ–΄μ‘Œλ‹€. μΎ°λ₯Έ λŒ€κ΅κ΅¬μ˜ 주ꡐ쒌 성당이라 μΎ°λ₯Έ 주ꡐ쒌 성당이라고도 λΆˆλ¦°λ‹€. ν˜„μž¬ μΎ°λ₯Έ λŒ€κ΅κ΅¬μ˜ ꡐꡬμž₯은 λΌμ΄λ„ˆ λ§ˆλ¦¬μ•„ 롐킀 좔기경이닀. 이 성당은 λ…μΌμ—μ„œ κ°€μž₯ 잘 μ•Œλ €μ§„ κ±΄μΆ•λ¬Όλ‘œ, μ„± 바싀리 λŒ€μ„±λ‹Ήμ— 이어, 1996λ…„ μœ λ„€μŠ€μ½” μ„Έκ³„μœ μ‚°μœΌλ‘œ λ“±μž¬λ˜μ—ˆλ‹€. μœ λ„€μŠ€μ½”μ—μ„œλŠ” μΎ°λ₯Έ λŒ€μ„±λ‹Ήμ„ 일컬어 β€œμΈλ₯˜μ˜ 창쑰적 재λŠ₯을 λ³΄μ—¬μ£ΌλŠ” λ“œλ¬Έ μž‘ν’ˆβ€μ΄λΌκ³  λ¬˜μ‚¬ν•˜μ˜€λ‹€.[1] 맀일 2λ§Œμ—¬ λͺ…μ˜ 관광객이 이 성당을 μ°ΎλŠ”λ‹€.[2]'
let newString = extract(oldString, { regex: [numbers] })
newString = removeStopwords(newString, _123)
// newString is now [ '1996' ]
})

Custom list of stopwords

And last, but not least, it is possible to use your own, custom list of stopwords:

const { removeStopwords } = require('stopword')
const oldString = 'you can even roll your own custom stopword list'.split(' ')
// Just add your own list/array of stopwords
const newString = removeStopwords(oldString, [ 'even', 'a', 'custom', 'stopword', 'list', 'is', 'possible']
// newString is now [ 'you', 'can', 'roll', 'your', 'own']

Removing stopwords for i.e. two languages and a custom stopword list

With spread syntax you can easily combine several stopword arrays into one. Useful for situations where two langauages are used interchangeably. Or when you have certain words that are used in every document that is not in your existing stopword arrays.

const { removeStopwords, eng, swe } = require('stopword')
const oldString = 'a really interesting string with some words trΓ€dgΓ₯rdsΓ€gare Γ€r beredda att prΓΆva vad som helst fΓΆr att bli av med de hatade mΓΆrdarsniglarna'.split(' ')
const customStopwords = ['interesting', 'really']
const newString = sw.removeStopwords(oldString, [...eng, ...swe, ...customStopwords]
// newString is now ['string', 'words', 'trΓ€dgΓ₯rdsΓ€gare', 'beredda', 'prΓΆva', 'helst', 'hatade', 'mΓΆrdarsniglarna']

API

removeStopwords

Returns an Array that represents the text with the specified stopwords removed.

  • text An array of words
  • stopwords An array of stopwords
const { removeStopwords } = require('stopword')
var text = removeStopwords(text[, stopwords])
// text is now an array of given words minus specified stopwords

<language code>

Language codes follow ISO 639-3 Language Code list. Arrays of stopwords for the following 62 languages are supplied:

  • _123 - 0-9 for different script (regular, Farsi, Korean and Myanmar)
  • afr - Afrikaans
  • ara - Arabic, Macrolanguage
  • hye - Armenian
  • eus - Basque
  • ben - Bengali
  • bre - Breton
  • bul - Bulgarian
  • cat - Catalan, Valencian
  • zho - Chinese, Macrolanguage
  • hrv - Croatian
  • ces - Czech
  • dan - Danish
  • nld - Dutch
  • eng - English
  • epo - Esperanto
  • est - Estonian, Macrolanguage
  • fin - Finnish
  • fra - French
  • glg - Galician
  • deu - German
  • ell - Greek, Modern
  • guj - Gujarati
  • hau - Hausa
  • heb - Hebrew
  • hin - Hindi
  • hun - Hungarian
  • ind - Indonesian
  • gle - Irish
  • ita - Italian
  • jpn - Japanese
  • kor - Korean
  • kur - Kurdish, Macrolanguage
  • lat - Latin
  • lav - Latvian, Macrolanguage
  • lit - Lithuanian
  • lgg - Lugbara
  • lggNd - Lugbara, No diacritics
  • msa - Malay, Macrolanguage
  • mar - Marathi
  • mya - Myanmar (Burmese)
  • nob - Norwegian bokmΓ₯l
  • fas - Persian (Farsi)
  • pol - Polish
  • por - Portuguese
  • porBr - Portuguese-Brazilian
  • panGu - Punjabi (Panjabi), Gurmukhi script
  • ron - Romanian (Moldavian, Moldovan)
  • rus - Russian
  • slk - Slovak
  • slv - Slovenian
  • som - Somali
  • sot - Sotho, Southern
  • spa - Spanish
  • swa - Swahili, Macrolanguage
  • swe - Swedish
  • tgl - Tagalog (Filipino)
  • tha - Thai
  • tur - Turkish
  • ukr - Ukrainian
  • urd - Urdu
  • vie - Vietnamese
  • yor - Yoruba
  • zul - Zulu

Languages with no space between words

jpn Japanese, tha Thai and zho Chinese and some of the other languages supported have no space between words. For these languages you need to split the text into an array of words in another way than just textString.split(' '). You can check out SudachiPy, TinySegmenter for Japanese and chinese-tokenizer, jieba, pkuseg for Chinese.

Your language missing?

If you can't find a stopword file for your language, you can try creating one with stopword-trainer. We're happy to help you in the process.

Contributions and licenses

Most of this work is from other projects and people, and wouldn't be possible without them. Thanks to among others the stopwords-iso project and the more-stoplist project. And thanks for all your code input: @arthurdenner, @micalevisk, @fabric-io-rodrigues, @behzadmoradi, @guysaar223, @ConnorKrammer, @GreXLin85, @nanopx, @virtual, @JustroX, @DavideViolante, @rodfeal, @BLKSerene and @dsdenes!

Licenses for this library and all third party code.

More Repositories

1

search-index

A persistent, network resilient, full text search library for the browser and Node.js
JavaScript
1,382
star
2

norch

A search server that can be installed with npm
JavaScript
655
star
3

solrstrap

Solrstrap is a Query-Result interface for Solr written in JavaScript, HTML and CSS
JavaScript
86
star
4

reuters-21578-json

An terse and JSONified version of the Reuters 21578 dataset
29
star
5

pumbledb

PumbleDB is a Node.js key-value server that uses LevelDB
JavaScript
21
star
6

term-vector

A node.js module that creates a term vector from a mixed text input. Supports stopword removal and customisable separators.
JavaScript
19
star
7

fergies-inverted-index

Throw JavaScript objects at the index and they will become retrievable by their properties using promises and map-reduce
JavaScript
18
star
8

term-frequency

A simple term frequency library (see https://en.wikipedia.org/wiki/Tf%E2%80%93idf#Term_frequency_2 )
JavaScript
10
star
9

docproc

A document processing pipeline
JavaScript
9
star
10

norch-document-processor

A library for parsing HTML into any sort of JSON you want
JavaScript
9
star
11

norch-fetch

Fetch pure HTML from a webserver and save it to disk
JavaScript
8
star
12

norch-indexer

An indexing tool for Forage.js
JavaScript
7
star
13

search-index-simple-node-js-example

This is a really basic example of how you get search-index to work in a node.js application
JavaScript
6
star
14

norch-bootstrap

A pluggable front-end for Forage based on Angular and Bootstrap
HTML
6
star
15

search-index-adder

The indexing module for search-index
JavaScript
5
star
16

search-index-indexing-in-browser

This is a super simple demo for indexing documents to a search-index in the browser
JavaScript
5
star
17

search-index-indexing-from-pouchdb-example

This is a quick and dirty demo that shows how to feed some documents into a pouchdb instance, and then index the entire database into a search-index.
JavaScript
5
star
18

search-index-searcher

search in a search-index
JavaScript
4
star
19

term-cluster

return clusters of terms in a given text
JavaScript
4
star
20

virtual-forage

A virtualisation package for Forage. Allows a host machine to run Norch on a guest OS
Ruby
4
star
21

level-out

levelup to stdout
JavaScript
4
star
22

norch-cluster

Norch-cluster is a distributed search engine
JavaScript
3
star
23

search-index-replicate-index-to-browser-example

JavaScript
3
star
24

world-bank-dataset

A JSONified dataset of projects funded by the World Bank.
JavaScript
3
star
25

level-in

A simple utility for writing to a leveldb
Shell
3
star
26

ngraminator

A really small ngram generator
JavaScript
2
star
27

search-index-replicator

The replication module for search-index
JavaScript
2
star
28

norch-client

JavaScript
2
star
29

norch-angular-app

A basic Norch-powered angular app. Use as an example or starting point.
JavaScript
2
star
30

search-index-issue-537

as per https://github.com/fergiemcdowall/search-index/issues/537
JavaScript
1
star
31

webpack-module-example

Example of javascript module compiled with webpack that can then be used with node, frontend bundles, and <script> tags
JavaScript
1
star
32

gatsby-starter-netlify-cms

JavaScript
1
star
33

intersect-arrays-to-stream

Takes an arbitrary amount of sorted arrays and returns the intersect as a stream
JavaScript
1
star
34

Oslo-bysykkel

Show the location and availability of Oslo city bikes
Vue
1
star
35

search-index-deleter

The deletion module for search-index
JavaScript
1
star
36

distribute-array

Distributes one array evenly between a given number of smaller arrays
JavaScript
1
star
37

search-index-matcher

A matcher that generates its content from a search-index
JavaScript
1
star
38

fergies-packager-test

A repo for testing packaging strategies
JavaScript
1
star
39

search-index-getter

A lib for retrieving individual documents from a search-index corpus
JavaScript
1
star