stanford解析器(http://nlp.stanford.edu/software/lex-parser.html),版本3.6.0,附带用于英语,德语和其他语言的训练语法。为了解析德语文本,stanford解析器提供了工具lexparser-lang.sh
./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
所以我用这些选项称呼它:
sadik@sadix: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) ($. .))
答案 0 :(得分:1)
演示脚本未运行具有正确字符集的标记生成器。因此,如果您的文本是预先标记的,您可以添加选项“-tokenized”,它只会使用空格作为标记分隔符。
您还想告诉解析器为德语使用“-encoding 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。
我建议只使用完整的管道来实现这一目标。
从这里下载Stanford CoreNLP 3.6.0:
从这里下载德国模型罐:
运行此命令:
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
这将标记化并解析文本并使用正确的字符编码。