簡體   English   中英

Java Stanford NLP:拼寫檢查

[英]Java Stanford NLP: Spell checking

我正在嘗試使用斯坦福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

關於如何做得更好的任何想法?

使用解析器的詞典的isKnown(String)方法作為拼寫檢查器不是解析器的可行用例。 方法是正確的:“false”表示在解析器訓練的大約100萬字的文本中沒有看到這個單詞(使用給定的大小寫)。 但是100萬字只是不足以用數據驅動方式訓練綜合拼寫檢查器的文本。 人們通常會使用至少兩個數量級的文本,並且可能會增加一些聰明才能處理大寫。 解析器包含一些聰明性來處理訓練數據中看不到的單詞,但這並未反映在isKnown(String)方法返回的內容中。

看起來你的答案/錯誤分為正確的名稱,真實的單詞(我假設在詞典中不存在)和真正的拼寫錯誤。 對“誠意”的虛假否定也表明資本化可能會把它拋棄,盡管你希望它足夠聰明,不值得檢查。 多元不應該是一個問題,但對“神”的假陰性? 它是否正確識別“上帝”?

既然您正在嘗試檢查拼寫,為什么要間接檢查它? 什么是lp.getLexicon()。isKnown(w.word())在內部做什么? 它不依賴於加載的語料庫? 為什么不加載字典,將案例規范化為大哈希,並進行“包含”檢查? 由於您處於NLP環境中,因此剝離專有名稱也應該相當容易,特別是考慮到您不是在尋找100%的准確性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM