语法检查是自然语言处理研究的活跃领域,因此目前还没有100%的答案(甚至可能没有80%的答案)。最简单的方法(或者至少是一个合理的基准)是使用n-gram语言模型(将utterance长度的LM概率进行归一化,并设置一个'grammatical'或'ungrammatical'的启发式阈值)。
你可以使用Google的n-gram语料库,或者在特定领域的数据上训练自己的语言模型。你可以使用NLTK,也可以使用LingPipe、SRI语言建模工具包或OpenGRM。
话虽如此,n-gram模型的表现并不算好。如果它满足了你的需求,那太好了,但如果你想做得更好,你就需要训练一个机器学习分类器。通常,一个语法分类器会使用句法和/或语义处理的特征(例如POS标记、依赖和从属分析等)。你可以看看ETS的Joel Tetrault及其团队,或都柏林的Jennifer Foster及其团队的一些工作。
很抱歉目前没有一个简单明了的答案......