spech icon indicating copy to clipboard operation
spech copied to clipboard

Check your text for grammar and spelling mistakes using multiple providers

spech

Build Status NPM version

Check your text for grammar and spelling mistakes using multiple providers

  • Multiple libraries/services for grammar and spelling checking
  • Multilingual document support
  • Zero config
  • Can work offline (only with Hunspell provider)

Screenshot

Usage

Files checking

npx spech README.md

File name can be omitted, by default it searches files by **/*.md mask. Default language is English, it can be changed with -l flag:

spech -l ru

spech -l ru-RU -l en-US - for multilingual documents

String and STDIN checking

You can check a string value using STDIN or --input argument

cat README.md | spech

spech --input 'Check the text'

Directives

disable

<!-- spech-disable -->
This text is ignored
<!-- spech-enable -->

dictionary

Add a phrase to a local document dictionary

<!-- spech-dictionary myword -->

languages

Add document-specific languages

<!-- spech-languages en es -->

Providers

To configure a provider pass -p flag:

spech -p hunspell -p yandex

Other options can be set in a config file.

Hunspell

Hunspell is the most popular open-source spell checker which supports a great variety of languages.

Read more.

GrammarBot

Free grammar checking API. With an API key, you can receive 250 requests/day (~7500/mo) at no cost. Without an API key, requests are limited to 100 per day per IP address (~3000/mo). The API supports only English (en-US and en-GB).

Read more.

Yandex Speller

Free and very fast spell checker API for en, ru and uk languages. It provides free 10k requests/day or 10m characters/day.

Read more.

Configuring

Configuration can be stored in:

  • spech.config.js
  • "spech" section of the package.json

spech.config.js

module.exports = {
  languages: ['en-us'],
  providers: [
    { name: 'hunspell' },
    { name: 'grammarBot', apiKey: 'YOUR_API_KEY' },
  ],
};

More details.

Dictionaries

It's possible to add words which are marked as a mistake into a dictionary file. Just create a file with .dic extension in your project root:

mydictionary.dic

# Simple word
browserify
# Regexp
/Component.tsx?/

More details.

API Usage

The most useful parts of the library are available through facade class SpellChecker.

Here is a simple example how it can be used:

const { Config, SpellChecker } = require('spech');

async function getMistakes() {
  const config = new Config({ ignoreCase: false });
  const checker = new SpellChecker(config);

  await checker.addDocumentsByMask(process.cwd(), 'docs/*.md');
  checker.addDictionaryPhrase('exceptionphrase');
  checker.addProviderByConfig({ name: 'hunspell' });

  const noMistakes = await checker.checkDocuments();
  if (noMistakes) {
    return [];
  }
  
  const corrections = checker.documents.map(doc => doc.corrections).flat();
  return corrections.map(correction => correction.fragment);
}