node package manager



Parse Solr/ElasticSearch synonyms files into JavaScript objects. You can then replace tokens with their synonyms easily.

Info on synonyms file format


npm install solr-synonyms


var synonyms = require('solr-synonyms');

Now you have access to the api.


synonyms.parse(inputString[, ignoreCase = true, expand = false])

Returns an object which maps the keys to arrays of strings.

synonyms.replace(tokens, synonyms)

  • tokens: An array of strings.
  • synonyms: An object which maps words to synonyms, e.g. the output of synonyms.parse.

Returns a new array where tokens have been replaced by their synonyms.

Example output

Given this input

# blank lines and lines starting with pound are comments.
#Explicit mappings match any token sequence on the LHS of "=>"
#and replace with all alternatives on the RHS.  These types of mappings
#ignore the expand parameter in the schema.
i-pod, i pod => ipod,
sea biscuit, sea biscit => seabiscuit
#Equivalent synonyms may be separated with commas and give
#no explicit mapping.  In this case the mapping behavior will
#be taken from the expand parameter in the schema.  This allows
#the same synonym file to be used in different synonym handling strategies.
ipod, i-pod, i pod
foozball , foosball
universe , cosmos
# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod, i-pod, i pod
# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod
#multiple synonym mapping entries are merged.
foo => foo bar
foo => baz
#is equivalent to
foo => foo bar, baz

with expand = false

    'i-pod': ['ipod', 'i-pod', 'i pod'],
    'i pod': ['ipod', 'i-pod', 'i pod'],
    'ipod': ['ipod', 'i-pod', 'i pod'],
    'sea biscuit': ['seabiscuit'],
    'sea biscit': ['seabiscuit'],
    'foosball': ['foozball'],
    'foozball': ['foozball'],
    'universe': ['universe'],
    'cosmos': ['universe'],
    'foo': ['foo bar', 'baz']

with expand = true

    'i-pod': ['ipod', 'i-pod', 'i pod'],
    'i pod': ['ipod', 'i-pod', 'i pod'],
    'ipod': ['ipod', 'i-pod', 'i pod'],
    'sea biscuit': ['seabiscuit'],
    'sea biscit': ['seabiscuit'],
    'foozball': ['foozball', 'foosball'],
    'foosball': ['foozball', 'foosball'],
    'universe': ['universe', 'cosmos'],
    'cosmos': ['universe', 'cosmos'],
    'foo': ['foo bar', 'baz']