Detection of errors can be achieved statistically and rule-based, the task of the hybrid approach being to resolve any conflicts that arise between the outputs of the two approaches.
even the most advanced systems are only able to distinguish between a limited number of error types and the task of correcting an error is even more difficult.