【问题标题】:Java Stanford NLP: Spell checkingJava 斯坦福 NLP:拼写检查
【发布时间】:2010-12-23 15:03:56
【问题描述】:

我正在尝试使用斯坦福 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();
    }

但是,这会产生相当多的误报:

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

关于如何更好地做到这一点的任何想法?

【问题讨论】:

  • lp 是什么?请在某处将其声明和构造函数添加到问题中。

标签: java nlp stanford-nlp spell-checking


【解决方案1】:

使用解析器的词典的 isKnown(String) 方法作为拼写检查器不是解析器的可行用例。该方法是正确的:“false”表示在训练解析器的大约 100 万个文本单词中没有看到这个单词(使用给定的大小写)。但是 100 万个单词不足以以数据驱动的方式训练一个全面的拼写检查器。人们通常会使用至少两个数量级的文本,并且很可能会增加一些处理大写的技巧。解析器包含一些处理训练数据中看不到的单词的聪明之处,但这并没有反映在 isKnown(String) 方法返回的内容中。

【讨论】:

    【解决方案2】:

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

    既然您要检查拼写,为什么要间接检查呢? lp.getLexicon().isKnown(w.word()) 在内部做什么?它不依赖于加载的语料库吗?为什么不直接加载字典,将大小写规范化为大散列,然后进行“包含”检查?由于您处于 NLP 环境中,因此去除专有名称也应该相当容易,尤其是考虑到您不是在寻找 100% 的准确度。

    【讨论】:

      猜你喜欢
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 2015-04-30
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多