Skip to main content

A wrapper on hunspell for use in Python

Project description

cHunSpell

Cython wrapper on Hunspell Dictionary

Description

This fork is based on https://github.com/MSeal/cython_hunspell and modified to reduce dependencies by removing caching and batch functionalities. Apart from Hunspell itself, there are no other third-party dependencies.
Additional, providing precompiled wheels for multiple platforms.


This repository provides a wrapper on Hunspell to be used natively in Python. The module uses cython to link between the C++ and Python code, with some additional features. There's very little Python overhead as all the heavy lifting is done on the C++ side of the module interface, which gives optimal performance.

Installing

For the simplest install simply run:

pip install chunspell

This will install the hunspell 1.7.2 C++ bindings on your behalf for your platform.

hunspell

The library installs hunspell version 1.7.2. As new version of hunspell become available this library will provide new versions to match.

Features

Spell checking & spell suggestions

How to use

Below are some simple examples for how to use the repository.

Creating a Hunspell object

from hunspell import Hunspell
h = Hunspell()

You now have a usable hunspell object that can make basic queries for you.

h.spell('test') # True

Spelling

It's a simple task to ask if a particular word is in the dictionary.

h.spell('correct') # True
h.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.

h.suggest('incorect') # ('incorrect', 'correction', corrector', 'correct', 'injector')

The suggestions are in sorted order, where the lower the index the closer to the input string.

Suffix Match

h.suffix_suggest('do') # ('doing', 'doth', 'doer', 'doings', 'doers', 'doest')

Stemming

The module can also stem words, providing the stems for pluralization and other inflections.

h.stem('testers') # ('tester', 'test')
h.stem('saves') # ('save',)

Analyze

Like stemming but return morphological analysis of the input instead.

h.analyze('permanently') # (' st:permanent fl:Y',)

Dictionaries

You can also specify the language or dictionary you wish to use.

h = Hunspell('en_US') # Canadian English

By default you have the only en_US dictionaries available.

However you can download your own and point Hunspell to your custom dictionaries.

h = Hunspell('en_GB-large', hunspell_data_dir='/custom/dicts/dir')

Adding Dictionaries

You can also add new dictionaries at runtime by calling the add_dic method.

h.add_dic(os.path.join(PATH_TO, 'special.dic'))

Adding words

You can add individual words to a dictionary at runtime.

h.add('sillly')

Furthermore you can attach an affix to the word when doing this by providing a second argument

h.add('silllies', "is:plural")

Removing words

Much like adding, you can remove words.

h.remove(word)

Language Preferences

  • Google Style Guide
  • Object Oriented (with a few exceptions)

Known Workarounds

  • On Windows very long file paths, or paths saved in a different encoding than the system require special handling by Hunspell to load dictionary files. To circumvent this on Windows setups, either set system_encoding='UTF-8' in the Hunspell constructor or set the environment variable HUNSPELL_PATH_ENCODING=UTF-8. Then you must re-encode your hunspell_data_dir in UTF-8 by passing that argument name to the Hunspell constructor or setting the HUNSPELL_DATA environment variable. This is a restriction of Hunspell / Windows operations.

Author

Author(s): Tim Rodriguez, Matthew Seal, cdhigh

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

chunspell-2.0.4-pp310-pypy310_pp73-win_amd64.whl (600.3 kB view hashes)

Uploaded PyPy Windows x86-64

chunspell-2.0.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (919.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (937.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

chunspell-2.0.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (910.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl (822.9 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

chunspell-2.0.4-pp39-pypy39_pp73-win_amd64.whl (600.3 kB view hashes)

Uploaded PyPy Windows x86-64

chunspell-2.0.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (919.3 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (937.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

chunspell-2.0.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (910.2 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl (822.8 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

chunspell-2.0.4-pp38-pypy38_pp73-win_amd64.whl (600.2 kB view hashes)

Uploaded PyPy Windows x86-64

chunspell-2.0.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (919.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (938.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

chunspell-2.0.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (910.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-pp38-pypy38_pp73-macosx_11_0_arm64.whl (823.4 kB view hashes)

Uploaded PyPy macOS 11.0+ ARM64

chunspell-2.0.4-pp37-pypy37_pp73-win_amd64.whl (600.2 kB view hashes)

Uploaded PyPy Windows x86-64

chunspell-2.0.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (919.9 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl (938.4 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ i686

chunspell-2.0.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (910.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp312-cp312-win_amd64.whl (606.5 kB view hashes)

Uploaded CPython 3.12 Windows x86-64

chunspell-2.0.4-cp312-cp312-win32.whl (589.2 kB view hashes)

Uploaded CPython 3.12 Windows x86

chunspell-2.0.4-cp312-cp312-musllinux_1_2_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ x86-64

chunspell-2.0.4-cp312-cp312-musllinux_1_2_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ i686

chunspell-2.0.4-cp312-cp312-musllinux_1_2_aarch64.whl (1.8 MB view hashes)

Uploaded CPython 3.12 musllinux: musl 1.2+ ARM64

chunspell-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (930.6 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (949.3 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686

chunspell-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (920.3 kB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp312-cp312-macosx_11_0_arm64.whl (830.4 kB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

chunspell-2.0.4-cp311-cp311-win_amd64.whl (606.8 kB view hashes)

Uploaded CPython 3.11 Windows x86-64

chunspell-2.0.4-cp311-cp311-win32.whl (589.9 kB view hashes)

Uploaded CPython 3.11 Windows x86

chunspell-2.0.4-cp311-cp311-musllinux_1_2_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ x86-64

chunspell-2.0.4-cp311-cp311-musllinux_1_2_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ i686

chunspell-2.0.4-cp311-cp311-musllinux_1_2_aarch64.whl (1.8 MB view hashes)

Uploaded CPython 3.11 musllinux: musl 1.2+ ARM64

chunspell-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (931.4 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (951.0 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686

chunspell-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (921.5 kB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp311-cp311-macosx_11_0_arm64.whl (829.6 kB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

chunspell-2.0.4-cp310-cp310-win_amd64.whl (606.5 kB view hashes)

Uploaded CPython 3.10 Windows x86-64

chunspell-2.0.4-cp310-cp310-win32.whl (590.2 kB view hashes)

Uploaded CPython 3.10 Windows x86

chunspell-2.0.4-cp310-cp310-musllinux_1_2_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ x86-64

chunspell-2.0.4-cp310-cp310-musllinux_1_2_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ i686

chunspell-2.0.4-cp310-cp310-musllinux_1_2_aarch64.whl (1.8 MB view hashes)

Uploaded CPython 3.10 musllinux: musl 1.2+ ARM64

chunspell-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (932.4 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl (951.6 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686

chunspell-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (922.0 kB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp310-cp310-macosx_11_0_arm64.whl (829.5 kB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

chunspell-2.0.4-cp39-cp39-win_amd64.whl (607.2 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

chunspell-2.0.4-cp39-cp39-win32.whl (590.9 kB view hashes)

Uploaded CPython 3.9 Windows x86

chunspell-2.0.4-cp39-cp39-musllinux_1_2_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ x86-64

chunspell-2.0.4-cp39-cp39-musllinux_1_2_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ i686

chunspell-2.0.4-cp39-cp39-musllinux_1_2_aarch64.whl (1.8 MB view hashes)

Uploaded CPython 3.9 musllinux: musl 1.2+ ARM64

chunspell-2.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (933.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl (952.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686

chunspell-2.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (922.6 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp39-cp39-macosx_11_0_arm64.whl (830.0 kB view hashes)

Uploaded CPython 3.9 macOS 11.0+ ARM64

chunspell-2.0.4-cp38-cp38-win_amd64.whl (607.3 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

chunspell-2.0.4-cp38-cp38-win32.whl (590.8 kB view hashes)

Uploaded CPython 3.8 Windows x86

chunspell-2.0.4-cp38-cp38-musllinux_1_2_x86_64.whl (1.9 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ x86-64

chunspell-2.0.4-cp38-cp38-musllinux_1_2_i686.whl (2.0 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ i686

chunspell-2.0.4-cp38-cp38-musllinux_1_2_aarch64.whl (1.8 MB view hashes)

Uploaded CPython 3.8 musllinux: musl 1.2+ ARM64

chunspell-2.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (933.0 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

chunspell-2.0.4-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl (952.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686

chunspell-2.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (923.1 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

chunspell-2.0.4-cp38-cp38-macosx_11_0_arm64.whl (830.3 kB view hashes)

Uploaded CPython 3.8 macOS 11.0+ ARM64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page