2009-12-05 123 views
3

我试图使用斯坦福大学NLP来检查文本样本的拼写准确性。它只是文本的度量,而不是过滤器或任何东西,所以如果它关闭了一点就没问题,只要错误是一致的。Java斯坦福大学NLP:拼写检查

我的第一个想法是检查字是由词汇知:

​​

然而,这会产生相当多的误报:

misspelled: Sincerity 
misspelled: Sisyphus 
misspelled: Sisyphus 
misspelled: fidelity 
misspelled: negates 
misspelled: gods 
misspelled: henceforth 
misspelled: atom 
misspelled: flake 
misspelled: Sisyphus 
misspelled: Camus 
misspelled: foandf 
misspelled: foandf 
misspelled: babby 
misspelled: formd 
misspelled: gurl 
misspelled: pregnent 
misspelled: babby 
misspelled: formd 
misspelled: gurl 
misspelled: pregnent 
misspelled: Camus 
misspelled: Sincerity 
misspelled: Sisyphus 
misspelled: Sisyphus 
misspelled: fidelity 
misspelled: negates 
misspelled: gods 
misspelled: henceforth 
misspelled: atom 
misspelled: flake 
misspelled: Sisyphus 

如何做任何想法这个更好?

+0

什么是'lp'?请将其声明和构造函数添加到某处的问题中。 – 2009-12-06 01:51:28

+0

我加了。谢谢。 – 2009-12-06 17:42:55

回答

9

使用解析器的词典的isKnown(String)方法作为拼写检查器不是解析器的可行用例。这个方法是正确的:“错误”意味着在解析器训练的大约100万字文本中没有看到(具有给定的大写字母)这个词。但是,用数据驱动的方式来培训一个全面的拼写检查工具是不够的。人们通常会使用至少两个数量级的文本,并且可能会增加一些巧妙处理大小写。解析器包含了一些巧妙处理训练数据中看不到的单词,但这并不反映在isKnown(String)方法返回的内容中。

0

它看起来像你的答案/错误之间的专有名称,真实的话(我假设不存在于词典)和真正的拼写错误。对“诚意”的一个错误的否定也表明,大写可能会抛弃它,尽管你希望它足够聪明,不至于 - 无论如何都值得检查。复数也不应该成为问题,而是对“神”的错误否定?它能正确识别“神”吗?

由于您正在尝试检查拼写,为什么要间接检查它?什么是lp.getLexicon()。isKnown(w.word())在内部做什么?这不取决于加载的语料库吗?为什么不加载字典,将案例规范化为大散列,并执行“包含”检查?既然你处于NLP环境中,那么也应该很容易去除专有名称,尤其是考虑到你不是在100%的精确度。