2016-03-31 5 views
0

Der Stanford-Parser (http://nlp.stanford.edu/software/lex-parser.html), Version 3.6.0, kommt mit trainierten Grammatiken für Engisch, Deutsch und andere Sprachen. Zu analysieren Deutsch Text der Stanford-Parser bietet das Tool lexparser-lang.shStanford-Parser kann keine deutschen Umlaute lesen

./lexparser-lang.sh 
Usage: lexparser-lang.sh lang len grammar out_file FILE... 

    lang  : Language to parse (Arabic, English, Chinese, German, French) 
    len  : Maximum length of the sentences to parse 
    grammar : Serialized grammar file (look in the models jar) 
    out_file : Prefix for the output filename 
    FILE  : List of files to parse 

Also mit diesen Optionen Ich nenne es:

[email protected]:stanford-parser-full-2015-12-09$ ./lexparser-lang.sh German 500 edu/stanford/nlp/models/lexparser/germanFactored.ser.gz factored german_test.txt 

Die Eingabedatei german_test.txt enthält einen einzigen deutschen Satz:

Fußball findet um 8 Uhr in der Halle statt. 

Aber das "ß" führt zu einer Warnung und einem falschen Ergebnis. Gleiches mit "ä", "ö" und "ü". Lexparser-lang.sh soll nun so gestaltet sein, dass sie mit deutschem Text als Eingabe umgehen kann. Gibt es eine Option, die ich vermisse?

wie es ist:

[main] INFO edu.stanford.nlp.parser.lexparser.LexicalizedParser - Loading parser from serialized file edu/stanford/nlp/models/lexparser/germanFactored.ser.gz ... 
done [3.8 sec]. 
Parsing file: german_test.txt 
Apr 01, 2016 12:48:45 AM edu.stanford.nlp.process.PTBLexer next 
WARNING: Untokenizable: (U+9F, decimal: 159) 
Parsing [sent. 1 len. 11]: Fuà ball findet um 8 Uhr in der Halle statt . 
Parsed file: german_test.txt [1 sentences]. 
Parsed 11 words in 1 sentences (32.07 wds/sec; 2.92 sents/sec). 

Mit einem Parse-Baum, der wie Mist aussieht:

(S (ADV FuÃ) (ADV ball) (VVFIN findet) 
    (PP (APPR um) (CARD 8) (NN Uhr)) 
    (PP (APPR in) (ART der) (NN Halle)) 
    (PTKVZ statt) ($. .)) 

Wie sollte es

werden, wenn "Fussball" geschrieben, da ist kein Problem (außer falsche Rechtschreibung)

[main] INFO edu.stanford.nlp.parser.lexparser.LexicalizedParser - Loading parser from serialized file edu/stanford/nlp/models/lexparser/germanFactored.ser.gz ... 
    done [3.5 sec]. 
    Parsing file: german_test.txt 
    Parsing [sent. 1 len. 10]: Fussball findet um 8 Uhr in der Halle statt . 
    Parsed file: german_test.txt [1 sentences]. 
    Parsed 10 words in 1 sentences (40.98 wds/sec; 4.10 sents/sec). 

Der richtige Baum:

(S (NN Fussball) (VVFIN findet) 
    (PP (APPR um) (CARD 8) (NN Uhr)) 
    (PP (APPR in) (ART der) (NN Halle)) 
    (PTKVZ statt) ($. .)) 

Antwort

1

Der Demo-Skript nicht läuft die tokenizer mit dem richtigen Zeichensatz. Wenn Ihr Text also vorbenannt ist, können Sie die Option "-tokenisiert" hinzufügen und es wird nur Platz als Token-Begrenzer verwendet.

Sie möchten auch den Parser anweisen, "-encoding ISO-8859-1" für Deutsch zu verwenden.

ist die vollständige Java-Befehl (mit der im .sh-Skript gefunden ändern):

java -Xmx2g -cp "./*" edu.stanford.nlp.parser.lexparser.LexicalizedParser -maxLength 500 -tLPP edu.stanford.nlp.parser.lexparser.NegraPennTreebankParserParams -hMarkov 1 -vMarkov 2 -vSelSplitCutOff 300 -uwm 1 -unknownSuffixSize 2 -nodeCleanup 2 -writeOutputFiles -outputFilesExtension output.500.stp -outputFormat "penn" -outputFormatOptions "removeTopBracket,includePunctuationDependencies" -encoding ISO_8859-1 -tokenized -loadFromSerializedFile edu/stanford/nlp/models/lexparser/germanFactored.ser.gz german_example.txt 

ich diese Ausgabe:

(NUR 
    (S (NN Fußball) (VVFIN findet) 
    (PP (APPR um) (CARD 8) (NN Uhr)) 
    (PP (APPR in) (ART der) (NN Halle) (ADJA statt.)))) 

wieder aktualisiert:

Stellen Sie sicher, trennen "statt" in "statt" da wir jetzt sagen, die Tokens sind Leerzeichen getrennt. Wenn wir dieses Update anwenden bekommen wir diese Parse:

(S (NN Fußball) (VVFIN findet) 
    (PP (APPR um) (CARD 8) (NN Uhr)) 
    (PP (APPR in) (ART der) (NN Halle)) 
    (PTKVZ statt) ($. .)) 

Also einfach zusammenfassen, im Grunde das Problem ist, müssen wir die PTBTokenizer sagen ISO_8859-1 und LexicalizedParser verwenden ISO_8859-1 zu verwenden.

Ich würde empfehlen, nur die vollständige Pipeline zu verwenden, um dies zu erreichen.

  1. Herunterladen Stanford CoreNLP 3.6.0 von hier:

    http://stanfordnlp.github.io/CoreNLP/

  2. Laden Sie das deutsche Modell jar von hier:

    http://stanfordnlp.github.io/CoreNLP/download.html

  3. Führen Sie diesen Befehl:

    java -Xmx3g -cp "stanford-corenlp-full-2015-12-09/*:stanford-corenlp-3.6.0-models-german.jar" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,parse -props StanfordCoreNLP-german.properties -file german_example_file.txt -outputFormat text 
    

Dies wird tokenize und Parsen Sie den Text und verwende die korrekte Zeichencodierung.

+0

interessant zu sehen, dass das Ergebnis nicht wirklich gut ist. In der Tat falsch. Das letzte Wort sollte (PTKVZ statt) sein. – Sadik

+0

Ich habe einen Fehler gemacht. Bitte sehen Sie die aktualisierte Antwort. – StanfordNLPHelp

+0

danke. Ich freue mich auf das nächste Update! – Sadik