crystal-hunspell
Crystal bindings for Hunspell.
Installation
Before installing crystal-hunspell ensure you have hunspell already installed:
-
Add the dependency to your
shard.yml:dependencies: hunspell: github: mamantoha/crystal-hunspell -
Run
shards install
Usage
The library has been tested with Hunspell version 1.7.2.
require "hunspell"
Open a dictionary:
hunspell = Hunspell.new("/usr/share/hunspell/en_US.aff", "/usr/share/hunspell/en_US.dic")
or
hunspell = Hunspell.new("en_US")
Ensure to close Hunspell instance after using.
hunspell.close
Below are some simple examples for how to use the repository.
Spelling
It's a simple task to ask if a particular word is in the dictionary.
hunspell.spell?("correct")
# => true
hunspell.spell?("incorect")
# => false
This will only ever return true or false, and won't give suggestions about why it might be wrong. It also depends on your choice of dictionary.
Suggestions
If you want to get a suggestion from Hunspell, it can provide a corrected label given a basestring input.
hunspell.suggest("arbitrage")
# => ["arbitrage", "arbitrages", "arbitrager", "arbitraged", "arbitrate"]
Suffix Match
hunspell.suffix_suggest("do")
# => ["doing", "doth", "doer", "dos", "do's", "doings", "doers"]
Stemming
The module can also stem words, providing the stems for pluralization and other inflections.
hunsell.stem("fishing")
# => ["fishing", "fish"]
Analyze
Like stemming but return morphological analysis of the input instead.
hunspell.analyze("permanently")
# => [" st:permanent fl:Y"]
Bulk Requests
You can also request bulk actions against Hunspell. Currently suggest, suffix_suggest, stem, and analyze are bulk requestable.
hunspell.bulk_suggest(["correct", "incorect"])
# => {"correct" => ["correct", "corrects", "cor rect", "cor-rect"],
# "incorect" => ["incorrect", "correction", "corrector", "injector", "correct"]}
hunspell.bulk_suffix_suggest(["cat", "do"])
# => {"cat" => ["cats", "cat's"],
# "do" => ["doing", "doth", "doer", "dos", "do's", "doings", "doers"]}
hunspell.bulk_stem(["stems", "currencies"])
# => {"stems" => ["stem"], "currencies" => ["currency"]}
hunspell.bulk_analyze(["dog", "permanently"])
# => {"dog" => [" st:dog"], "permanently" => [" st:permanent fl:Y"]}
Development
sudo apt install libclang-dev libhunspell-dev
Generate new bindings for Hunspell
crystal ./lib/crystal_lib/src/main.cr src/hunspell/lib_hunspell.cr.in > src/hunspell/lib_hunspell.cr
Contributing
- Fork it (https://github.com/mamantoha/crystal-hunspell/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
Contributors
- Anton Maminov - creator and maintainer