Domanda

Sto cercando di verificare l'accuratezza ortografia di campioni di testo utilizzando la Stanford NLP. E 'solo una metrica del testo, non un filtro o niente, quindi se si parte da un po' va bene, fino a quando l'errore è uniforme.

La mia prima idea era quella di verificare se la parola è conosciuto con il lessico:

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();
    }

Tuttavia, questo produce un sacco di falsi positivi:

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

Tutte le idee su come fare questo meglio?

È stato utile?

Soluzione

Usando il metodo isknown (String) del lessico del parser come un correttore ortografico non è un caso d'uso valida del parser. Il metodo è corretto: "false" significa che questa parola non è stato visto (con il dato capitalizzazione) nei circa 1 milione di parole di testo parser è addestrato da. Ma 1 milione di parole non è sufficiente testo per formare un correttore ortografico completo in modo da data-driven. La gente avrebbe tipicamente utilizzare almeno due ordini di grandezza del testo più, e potrebbe anche aggiungere un po 'di intelligenza per gestire capitalizzazione. Il parser include una parte di questa intelligenza per gestire parole che erano invisibili nei dati di addestramento, ma questo non si riflette in ciò che l'isknown (String) restituisce.

Altri suggerimenti

Sembra che la tua risposta / errori sono divise tra i nomi propri, parole reali (che presumo non esistono nel lessico) e veri errori di ortografia. Un falso negativo sul "Sincerità" suggerisce anche che la capitalizzazione potrebbe essere gettando via, anche se ci si spera che sarebbe stato sufficiente per non intelligente - la pena di verificare in ogni caso. Plurali non dovrebbero essere un problema sia, ma un falso negativo sulla "dei"? Ha identificare correttamente "dio"?

Dal momento che si sta cercando di controllare l'ortografia, perché controllare indirettamente? ciò che è lp.getLexicon (). isknown (w.word ()) facendo internamente? non è vero dipende dal corpus caricato? Perché non caricare un dizionario, normalizzare il caso in un grande hash, e fare un "contiene" check? Visto che siete in un contesto NLP, dovrebbe anche essere ragionevolmente facile mettere a nudo fuori i nomi propri, soprattutto considerando che non siete in cerca per il 100% di precisione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top