Nic*_*ner 5 java nlp spell-checking stanford-nlp
我正在尝试使用斯坦福NLP检查文本样本的拼写准确性.它只是文本的一个度量标准,而不是过滤器或任何东西,所以只要错误是一致的,如果它稍微关闭它就没问题了.
我的第一个想法是检查词典是否知道这个词:
private static LexicalizedParser lp = new LexicalizedParser("englishPCFG.ser.gz");
@Analyze(weight=25, name="Spelling")
public double spelling() {
int result = 0;
for (List<? extends HasWord> list : sentences) {
for (HasWord w : list) {
if (! lp.getLexicon().isKnown(w.word())) {
System.out.format("misspelled: %s\n", w.word());
result++;
}
}
}
return result / sentences.size();
}
Run Code Online (Sandbox Code Playgroud)
但是,这会产生很多误报:
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
Run Code Online (Sandbox Code Playgroud)
关于如何做得更好的任何想法?
使用解析器的词典的isKnown(String)方法作为拼写检查器不是解析器的可行用例.该方法是正确的:"false"表示在解析器训练的大约100万字的文本中没有看到这个单词(使用给定的大小写).但是100万字只是不足以用数据驱动方式训练综合拼写检查器的文本.人们通常会使用至少两个数量级的文本,并且可能会增加一些聪明才能处理大写.解析器包含一些聪明性来处理训练数据中看不到的单词,但这并未反映在isKnown(String)方法返回的内容中.
| 归档时间: |
|
| 查看次数: |
3936 次 |
| 最近记录: |