2016-03-31 8 views
0

Парсер stanford (http://nlp.stanford.edu/software/lex-parser.html), версия 3.6.0, поставляется с обученными грамматиками для английского, немецкого и других языков. Чтобы разобрать текст на немецком языке анализатор Стэнфорд предоставляет инструмент lexparser-lang.shstanford parser не может читать немецкий умляут

./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 

Так я называю его с этими параметрами:

[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 

Входной файл german_test.txt содержит один немецкий фразу:

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

Но «ß» приводит к предупреждению и неправильному результату. То же самое с «ä», «ö» и «ü». Теперь предполагается, что lexparser-lang.sh предназначен для обработки немецкого текста в качестве входных данных. Есть ли какой-либо вариант, который мне не хватает?

Как это:

[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). 

С синтаксическое дерево, которое выглядит как дерьмо:

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

Как это должно быть

Когда написано "Fussball", там не является проблемой (за исключением неправильной орфографии)

[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). 

Правильное дерево:

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

ответ

1

Демо-скрипт не работает в Tokenizer с правильным набором символов. Поэтому, если ваш текст предварительно обозначен, вы можете добавить опцию «-tokenized», и она просто будет использовать пробел в качестве разделителя токенов.

Также вы хотите сказать синтаксическому анализатору использовать «-кодирование ISO-8859-1» для немецкого языка.

Вот команда, полный Java (изменить один найденный в сценарии .sh):

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 

я получаю этот выход:

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

ОБНОВЛЕНО РАЗ:

Убедитесь отделить «statt». в "statt." поскольку теперь мы говорим, что маркеры разделены пробелами. Если применить это исправление мы получаем этот парсер:

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

Так что в итоге, в основном вопрос мы должны сказать PTBTokenizer использовать ISO_8859-1 и LexicalizedParser использовать ISO_8859-1.

Я бы порекомендовал только использовать полный трубопровод для этого.

  1. Загрузить Stanford CoreNLP 3.6.0 отсюда:

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

  2. Скачать немецкую модель баночку здесь:

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

  3. Выполнить эту команду:

    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 
    

Это разметить и проанализировать текст и используйте правильную кодировку символов.

+0

интересно видеть, что результат не очень хороший. На самом деле это неправильно. Последнее слово должно быть (PTKVZ statt). – Sadik

+0

Я допустил ошибку. См. Обновленный ответ. – StanfordNLPHelp

+0

спасибо. Я с нетерпением жду следующего обновления! – Sadik

Смежные вопросы