wooorm/dictionaries
Hunspell dictionaries in UTF-8
dictionaries
Collection of normalized and installable hunspell dictionaries.
Contents
- What is this?
- When should I use this?
- Install
- Use
- List of dictionaries
- Examples
- Types
- Security
- Contribute
- License
What is this?
This monorepo is a bunch of scripts that crawls dictionaries from several
sources,
normalizes them,
and packs them so that they can each be installed and used in one single way.
Dictionaries are not maintained here but they are usable from here.
When should I use this?
You can particularly use the packages here as a programmer when integrating with
other tools (such as nodehun or nspell)
or when making such tools.
Install
These packages are ESM only.
In Node.js (version 16+),
install with npm:
npm install dictionary-en👉 Note: replace
enwith the language code you want.
⚠️ Important: this project itself is MIT,
but eachindex.dicandindex.afffile still has its original license!
Use
import en from 'dictionary-en'
console.log(en)
// To do: use `en` somehowYields:
{aff: <Buffer>, dic: <Buffer>}List of dictionaries
👉 Note: preferred BCP-47 codes are used (according to Unicode CLDR).
To illustrate,
as American English and Brazilian Portuguese are the most common types of
English and Portuguese respectively,
they get the codesenandpt.
In total 92 dictionaries are provided.
Examples
Example: use with nspell
This example uses dictionary-en in combination with
nspell.
Show install command for this example
npm install dictionary-en nspellimport en from 'dictionary-en'
import nspell from 'nspell'
const spell = nspell(en)
console.log(spell.correct('color'))
console.log(spell.correct('colour'))Yields:
true
falseExample: load files
This example loads the index.dic and index.aff files located in
dictionary-hyw (Western Armenian) from a Node.js JavaScript module (ESM).
It uses a ponyfill (import-meta-resolve) for
an experimental Node API.
Show install command for this example
npm install dictionary-hyw import-meta-resolveimport fs from 'node:fs/promises'
import {resolve} from 'import-meta-resolve'
const base = await resolve('dictionary-hyw', import.meta.url)
const aff = await fs.readFile(new URL('index.aff', base))
const dic = await fs.readFile(new URL('index.dic', base))
console.log(aff, dic)Example: use with macOS
Follow these steps to use a dictionary on macOS:
- navigate to the dictionary you want on GitHub,
such asdictionaries/$code(replace$codewith the language code you
want) - download the
index.affandindex.dicfiles (as in open them,
right-click “Raw”,
and “download linked files”) - rename the download files to
$code.affand$code.dic - move
$code.affand$code.dicinto the folder~/Library/Spelling/ - go to System Preferences > Keyboard > Text > Spelling and
select your added language (it should come with the(Library)suffix and
is situated at the bottom)
Types
The packages are typed with TypeScript.
Security
These packages are safe.
Contribute
Yes please!
See How to Contribute to Open Source.
Build
To build this project,
on macOS,
you at least need to install:
- wget:
brew install wget(crawling) - hunspell:
brew install hunspell(many dictionaries) - sed:
brew install gnu-sed(crawling, many dictionaries) - coreutils:
brew install coreutils(many dictionaries) - ispell:
brew install ispell(German)
👉 Note: sed and the GNU replacements should be setup in PATH to overwrite
macOS defaults.
Updating a dictionary
Dictionaries are not maintained here.
Report problems upstream.
Adding a new dictionary
Dictionaries are not maintained here.
Most languages have a small community or institute that maintains a dictionary,
and they often do so on GitHub or similar.
Please ask in the issues to request that such a dictionary is included here.
👉 Note: acceptable dictionaries must:
- have a significant affix file (not just a
.dicfile)- have an open source license
- have recent contributions
License
See license files in each dictionary for the licensing of index.dic and
index.aff files.