Python: check whether a word is spelled correctly

38,405

Solution 1

Two possible ways of doing it:

  1. Have your own file which has all the valid words. Load the file into a set and compare each word to see whether it exists in it (word in set)
  2. (The better way) Use PyEnchant, a spell checking library for Python

PyEnchant is not actively maintained now.

Solution 2

I was looking for the same functionality and struggled to find an existing library that works in Windows, 64 bit. PyEnchant, although a great library, isn't currently active and doesn't work in 64 bit. Other libraries I found didn't work in Windows.

I finally found a solution that I hope others will find valuable.

The solution...

  • Use nltk
  • Extract the word list from nltk.corpus.brown
  • Convert the word list to a set (for efficient searching)
  • Use the in keyword to determine if your string is in the set

from nltk.corpus import brown
word_list = brown.words()
word_set = set(word_list)

# Check if word is in set
"looked" in word_set  # Returns True
"hurrr" in word_set  # Returns False

Use a timer check and you'll see this takes virtually no time to search the set. A test on 1,000 words took 0.004 seconds.

Solution 3

I personally used: http://textblob.readthedocs.io/en/dev/ It is an active project and according to the website:

Spelling correction is based on Peter Norvig’s “How to Write a Spelling Corrector”[1] as implemented in the pattern library. It is about 70% accurate

Share:
38,405
Nikolai
Author by

Nikolai

Updated on July 09, 2022

Comments

  • Nikolai
    Nikolai almost 2 years

    I'm looking for a an easy way to check whether a certain string is a correctly-spelled English word. For example, 'looked' would return True while 'hurrr' would return False. I don't need spelling suggestions or any spelling-correcting features. Just a simple function that takes a string and returns a boolean value.

  • Nikolai
    Nikolai over 13 years
    Thank you, this is exactly what I did while waiting for an answer ;)
  • Karl Knechtel
    Karl Knechtel over 13 years
    Use a set rather than a list, and ask if word in my_set for better performance.
  • user225312
    user225312 over 13 years
    @Karl: A very valid point indeed, sets are significantly faster than lists when it comes to determining if an object is present in the set or not. Updated.
  • moi
    moi over 10 years
    PyEnchant is an excellent suggestion!
  • venkatvb
    venkatvb almost 9 years
    Instead of list or set, I'll go for trie tree
  • Tahlor
    Tahlor about 6 years
    Missing a lot of not terribly uncommon words, e.g. reuse, gleams, cue etc.
  • Admin
    Admin over 4 years
    Textblob is super cool! in installation, usage, documentation. Thanks for sharing