Recently I’ve looked through several spell checker algorithms including simple ones(like Peter Norvig’s) and much more complex (like Brill and Moore’s) ones. But there’s a type of errors which none of them can handle. If for example I type stackoverflow instead of stack overflow these spellcheckers will fail to correct the mistype (unless the stack overflow in the dictionary of terms). Storing all the pairs of words is too expensive (and it will not help if the error is 3 single words without spaces between them).
Is there an algorithm which can correct (despite usual mistypes) this type of errors?
Some examples of what I need:
spel checker -> spell checker
spellchecker -> spell checker
spelcheker -> spell checker
I hacked up Norvig’s spell corrector to do this. I had to cheat a bit and add the word ‘checker’ to Norvig’s data file because it never appears. Without that cheating, the problem is really hard.
Basically you need to change the code so that:
The latter is the trickiest, and I use a braindead independence assumption for phrase composition that the probability of two adjacent words is the product of their individual probabilities (here done with sum in log prob space), with a small penalty. I am sure that in practice, you’ll want to keep some bigram stats to do that splitting well.