nspell v2.1.5
nspell
Hunspell-like spell-checker in plain-vanilla JavaScript.
nspell contains most of the essential core of Hunspell. It does not contain a tokeniser but leaves many details up to implementors. The main difference, conceptually, is that Hunspell is based on the user and their preferences, whereas nspell is based on explicitly passed in options, thus producing the same results regardless of OS, file system, or environment.
Contents
Install
npm:
npm install nspellYou probably also want to install some dictionaries:
npm install dictionary-enUse
var dictionary = require('dictionary-en')
var nspell = require('nspell')
dictionary(ondictionary)
function ondictionary(err, dict) {
if (err) {
throw err
}
var spell = nspell(dict)
console.log(spell.correct('colour')) // => false
console.log(spell.suggest('colour')) // => ['color']
console.log(spell.correct('color')) // => true
console.log(spell.correct('npm')) // => false
spell.add('npm')
console.log(spell.correct('npm')) // => true
}API
NSpell(dictionary)
Create a new spell checker.
Passing an affix document is required, through any of the below mentioned
signatures.
nspell is useless without at least one dic passed: make sure to pass one
either in the constructor or to nspell#dictionary.
Signatures
NSpell(dictionary)NSpell(aff[, dic])NSpell(dictionaries)
Parameters
dictionary(Object) — Object withaff(required) anddic(optional) propertiesaff(Bufferorstring) — Affix document to use. Must be in UTF-8 when bufferdic(Bufferorstring) — Dictionary document to use. Must be in UTF-8 when bufferdictionaries(Array.<Dictionary>) — List ofdictionaryobjects. The first must have anaffkey, otheraffkeys are ignored
Returns
New instance of NSpell.
NSpell#correct(word)
Check if word is correctly spelled.
Example
spell.correct('color') // => true
spell.correct('html') // => false
spell.correct('abreviation') // => falseParameters
word(string) — Word to check for correct spelling
Returns
boolean — Whether word is correctly spelled.
NSpell#suggest(word)
Suggest correctly spelled words close to word.
Example
spell.suggest('colour') // => ['color']
spell.suggest('color') // => []
spell.suggest('html') // => ['HTML']
spell.suggest('alot') // => ['allot', 'slot', 'clot', …]Parameters
word(string) — Word to suggest spelling corrections for
Returns
Array.<string> — List with zero or more suggestions.
NSpell#spell(word)
Get spelling information for word.
Example
spell.spell('colour') // => {correct: false, forbidden: false, warn: false}
spell.spell('color') // => {correct: true, forbidden: false, warn: false}Parameters
word(string) — Word to check
Returns
Object, with the following properties:
correct(boolean) — Whetherwordis correctly spelledforbidden(boolean) — Whetherwordis actually correct, but forbidden from showing up as such (often by the users wish)warn(boolean) — Whetherwordis correct, but should trigger a warning (rarely used in dictionaries)
NSpell#add(word[, model])
Add word to known words.
If no model is given, the word will be marked as correct in the future, and will
show up in spelling suggestions.
If a model is given, word will be handled the same as model.
Example
spell.correct('npm') // => false
spell.suggest('nnpm') // => ['ppm', 'bpm', …]
spell.add('npm')
spell.correct('npm') // => true
spell.suggest('nnpm') // => ['npm']Parameters
word(string) — Word to addmodel(string, optional) — Known word to modelwordafter
Returns
NSpell — Operated on instance.
NSpell#remove(word)
Remove word from the known words.
Example
spell.correct('color') // => true
spell.remove('color')
spell.correct('color') // => falseParameters
word(string) — Word to add
Returns
NSpell — Operated on instance.
NSpell#wordCharacters()
Get extra word characters defined by the loaded affix file.
Most affix files don’t set these, but for example the en dictionary sets
0123456789.
Example
spell.wordCharacters() // => '0123456789'Returns
string? — Defined word characters, if any.
NSpell#dictionary(dic)
Add an extra dictionary to the spellchecker.
Example
spell.dictionary(
['5', 'npm', 'nullish', 'rebase', 'SHA', 'stringification'].join('\n')
)Parameters
dic(Bufferorstring) — Dictionary document to use; must be in UTF-8 when buffer
Returns
NSpell — Operated on instance.
Note
The given dic must be designed to work with the already loaded affix.
It’s not possible to add dictionary files from different languages together
(use two NSpell instances for that).
NSpell#personal(dic)
Add a personal dictionary.
Example
spell.personal(['foo', 'bar/color', '*baz'].join('\n'))Parameters
dic(Bufferorstring) — Dictionary document to use; must be in UTF-8 when buffer
Returns
NSpell — Operated on instance.
Note
Lines starting with a * mark a word as forbidden, which results in them being
seen as incorrect, and prevents them from showing up in suggestions.
Splitting a line in two with a slash, adds the left side and models it after the
already known right word.
Dictionaries
nspell supports many parts of Hunspell-style dictionaries. Essentially, the concept of a dictionary consists of one “affix” document, and one or more “dictionary” documents. The documents are tightly linked, so it’s not possible to use a Dutch affix with an English dictionary document.
Below is a short introduction, see hunspell(5) for more information.
Affix documents
Affix documents define the language, keyboard, flags, and much more. For example, a paraphrased Dutch affix document looks as follows:
SET UTF-8
KEY qwertyuiop|asdfghjkl|zxcvbnm|qawsedrftgyhujikolp|azsxdcfvgbhnjmk|aze|qsd|lm|wx|aqz|qws|
WORDCHARS '’0123456789ij.-\/
REP 487
REP e en
REP ji ij
REP u oe
# …
SFX An Y 11
SFX An 0 de d
SFX An 0 fe f
SFX An 0 ge g
# …Not every option is supported in nspell. See Affix options for a list of all options and which ones are supported.
Dictionary documents
Dictionary documents contain words and flags applying to those words. For example:
3
foo
bar/a
baz/abThe above document contains three words, as the count on the first line shows. Further lines each start with a word. Some lines contain flags, as denoted by the slashes. What those flags do, and the size of flags, is defined by affix documents.
Personal dictionary documents
Personal dictionaries are not intertwined with affix document. They define new words and words to forbid. For example:
foo
bar/baz
*quxIn the above example, foo is added as a known word; bar is added as well,
but modelled after the existing word baz; finally, qux is marked as a
forbidden word.
Affix options
The following affix options are known to Hunspell. The checked ones are supported by nspell.
General
SET encoding(UTF-8 is implied)FLAG valueCOMPLEXPREFIXESLANG langcodeIGNORE charactersAF number_of_flag_vector_aliasesAF flag_vectorAF definitions in the affix file:AF flag_vector
Suggestion
KEY characters_separated_by_vertical_line_optionallyTRY charactersNOSUGGEST flagMAXCPDSUGS numMAXNGRAMSUGS numMAXDIFF [0-10]ONLYMAXDIFFNOSPLITSUGSSUGSWITHDOTSREP number_of_replacement_definitionsREP what replacementMAP number_of_map_definitionsMAP string_of_related_chars_or_parenthesized_character_sequencesPHONE number_of_phone_definitionsPHONE what replacementWARN flagFORBIDWARN
Compounding
BREAK number_of_break_definitionsBREAK character_or_character_sequenceCOMPOUNDRULE number_of_compound_definitionsCOMPOUNDRULE compound_patternCOMPOUNDMIN numCOMPOUNDFLAG flagCOMPOUNDBEGIN flagCOMPOUNDLAST flagCOMPOUNDMIDDLE flagONLYINCOMPOUND flagCOMPOUNDPERMITFLAG flagCOMPOUNDFORBIDFLAG flagCOMPOUNDMORESUFFIXESCOMPOUNDROOT flagCOMPOUNDWORDMAX numberCHECKCOMPOUNDDUPCHECKCOMPOUNDREPCHECKCOMPOUNDCASECHECKCOMPOUNDTRIPLESIMPLIFIEDTRIPLECHECKCOMPOUNDPATTERN number_of_checkcompoundpattern_definitionsCHECKCOMPOUNDPATTERN endchars[/flag] beginchars[/flag] [replacement]FORCEUCASE flagCOMPOUNDSYLLABLE max_syllable vowelsSYLLABLENUM flags
Affix creation
PFX flag cross_product numberPFX flag stripping prefix [condition [morphological_fields…]]SFX flag cross_product numberSFX flag stripping suffix [condition [morphological_fields…]]
Other
CIRCUMFIX flagFORBIDDENWORD flagFULLSTRIPKEEPCASE flagICONV number_of_ICONV_definitionsICONV pattern pattern2OCONV number_of_OCONV_definitionsOCONV pattern pattern2LEMMA_PRESENT flagNEEDAFFIX flagPSEUDOROOT flagSUBSTANDARD flagWORDCHARS charactersCHECKSHARPS