2016-03-31 37 views
0

Stanford ayrıştırıcısı (http://nlp.stanford.edu/software/lex-parser.html), sürüm 3.6.0, Engish, Almanca ve diğer diller için eğitimli dilbilgisi ile birlikte gelir.stanford ayrıştırıcısı, Almanca açıklamalarını okuyamaz

[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 

girdi dosyası german_test.txt tek Alman cümle içeriyor: alman metni ayrıştırmak için stanford ayrıştırıcı

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

Yani bu seçeneklerle diyoruz lexparser-lang.sh aracı sağlar

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

Ancak "ß" bir uyarı ve yanlış sonuçla sonuçlanır. "Ä", "ö" ve "ü" ile aynı. Şimdi, lexparser-lang.sh'in Almanca metinle giriş yapmak için tasarlanması gerekiyor. Kaybettiğim bir seçenek var mı?

Ne kadar: bok gibi görünen bir ayrıştırma ağacının ile

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

olması gerektiği Nasıl orada "Fussball" yazılı

, sorun değil (yanlış yazım hariç)

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

doğru ağacı:

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

cevap

1

demo komut doğru karakter seti ile dizgeciklerini çalışmıyor. Bu nedenle, metniniz önceden jetonize edilmişse, "-tokenized" seçeneğini ekleyebilir ve yalnızca boşluk belirteci olarak alanı kullanır.

Ayrıca, ayrıştırıcının Almanca için "-kodlama ISO-8859-1" kullanmasını da söylemek istersiniz.

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

TEKRAR GÜNCELLEME:

emin olun

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 

bu çıktıyı almak: Burada

tam java komutu (.sh komut dosyasında bulunan bir değiştirme) 'dir "statt" kelimesini ayırmak için "statt." içine şimdi belirttiğimiz için belirteçler beyaz alan ayrılıyor. Bu düzeltmeyi uygularsanız bu ayrıştırma olsun:
(S (NN Fußball) (VVFIN findet) 
    (PP (APPR um) (CARD 8) (NN Uhr)) 
    (PP (APPR in) (ART der) (NN Halle)) 
    (PTKVZ statt) ($. .)) 

Dolayısıyla, sadece özetlemek gerekirse, temelde sorunu biz ISO_8859-1 kullanmak ISO_8859-1 ve LexicalizedParser kullanmak PTBTokenizer söylemek gerekir olduğunu.

Bunu yapmak için yalnızca tam boru hattını kullanmanızı tavsiye ederim.

  1. Download Stanford CoreNLP 3.6.0 buradan:

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

  2. buradan Alman modeli kavanoz indir:

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

  3. çalıştırın bu komutu:

    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 
    

Bu simgeleştirir ve metni ayrıştır ve doğru karakter kodlamasını kullanın. Sonucun gerçekten iyi olmadığını görmek için

+0

ilginç. Aslında yanlış. Son kelime (PTKVZ statt) olmalıdır. – Sadik

+0

Bir hata yaptım. Lütfen güncellenmiş cevaba bakınız. – StanfordNLPHelp

+0

Teşekkürler. Bir sonraki güncellemeyi okumak için sabırsızlanıyorum! – Sadik