Frage

Ich versuche, Rechtschreibung Genauigkeit der Textproben mit der Stanford NLP zu überprüfen. Es ist nur eine Metrik des Textes, kein Filter oder etwas, so dass, wenn es ausgeschaltet ist ein bisschen es ist in Ordnung, solange die Fehler gleichmäßig ist.

Meine erste Idee war zu prüfen, ob das Wort durch das Lexikon bekannt ist:

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

Jedoch erzeugt dies eine ganze Menge von Fehlalarmen:

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

Alle Ideen, wie dies besser zu tun?

War es hilfreich?

Lösung

Das isKnown (String) -Methode des Parser verwenden Lexikon als eine Rechtschreibprüfung keine realisierbare Anwendungsfall des Parsers ist. Das Verfahren ist korrekt: „false“ bedeutet, dass dieses Wort nicht (mit der gegebenen Kapitalisierung) in den rund 1 Million Worten des Textes ist der Parser von geschulten gesehen wurde. Aber eine Million Wörter ist einfach nicht genug Text eine umfassende Rechtschreibprüfung von in einer datengesteuerten Art und Weise zu trainieren. Die Leute würden typischerweise mindestens zwei Größenordnung von Text verwenden mehr, und vielleicht auch eine gewisse Gewandtheit in der Großschreibung zu behandeln. Der Parser enthält diesen Schlau einige Worte zu behandeln, die in den Trainingsdaten unsichtbar waren, aber dies wird nicht reflektiert, was die isKnown (String) Methode gibt.

Andere Tipps

Es ist wie Ihre Antwort sieht / Fehler zwischen Eigennamen unterteilt sind, reale Wörter (was ich davon ausgehen, gibt es nicht im Lexikon) und wahre Fehlbuchstabierungen. Ein falsch negative auf „Sincerity“ legt auch nahe, dass Kapitalisierung könnte es weg werfen, wenn Sie es würde hoffen, genug, um nicht klug sein würde - es lohnt sowieso. Plurale sollen kein Problem sein, auch nicht, aber ein falsche negative auf „Göttern“? Ist es richtig identifizieren „Gott“?

Da Sie versuchen, die Rechtschreibung zu überprüfen, warum es indirekt überprüfen? was ist lp.getLexicon (). isKnown (w.word ()) intern zu tun? nicht auf dem belasteten Korpus ab? Warum nicht einfach ein Wörterbuch laden, normalisieren den Fall in einem großen Hash, und tun eine „enthält“ überprüfen? Da Sie in einem NLP Kontext sind, dann sollte es auch relativ einfach sein Eigennamen abzustreifen, vor allem da man nicht für 100% Genauigkeit an.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top