如何使用中文模型,我在类路径中下载“stanford-corenlp-3.5.2-models-chinese.jar”并复制
<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.5.2</version>
<classifier>models-chinese</classifier>
</dependency>
到pom.xml文件。另外,我的input.txt是
因出席中国大陆阅兵引发争议的国民党前主席连战今晚金婚宴,立法院长王金平说,已向连战恭喜,等一下回南部。 连战夫妇今晚的50周年金婚纪念宴,正值连战赴陆出席阅兵引发争议之际,社会关注会否受到影响。 包括国民党主席朱立伦,副主席郝龙斌等人已分别对外表示另有行程,无法出席。
然后我使用代码
编译程序java -cp "*" -Xmx1g edu.stanford.nlp.pipeline.StanfordCoreNLP -props StanfordCoreNLP-chinese.properties -annotators segment,ssplit -file input.txt
,结果如下。但它会出现以下错误,我该如何解决这个问题?
C:\stanford-corenlp-full-2015-04-20>java -cp "*" -Xmx1g edu.stanford.nlp.pipelin
e.StanfordCoreNLP -props StanfordCoreNLP-chinese.properties -annotators segment,
ssplit -file input.txt
Registering annotator segment with class edu.stanford.nlp.pipeline.ChineseSegmen
terAnnotator
Adding annotator segment
Loading Segmentation Model ... Loading classifier from edu/stanford/nlp/models/s
egmenter/chinese/ctb.gz ... Loading Chinese dictionaries from 1 file:
edu/stanford/nlp/models/segmenter/chinese/dict-chris6.ser.gz
Done. Unique words in ChineseDictionary is: 423200.
done [22.9 sec].
Ready to process: 1 files, skipped 0, total 1
Processing file C:\stanford-corenlp-full-2015-04-20\input.txt ... writing to C:\
stanford-corenlp-full-2015-04-20\input.txt.xml {
Annotating file C:\stanford-corenlp-full-2015-04-20\input.txt Adding Segmentat
ion annotation ... INFO: TagAffixDetector: useChPos=false | useCTBChar2=true | u
sePKChar2=false
INFO: TagAffixDetector: building TagAffixDetector from edu/stanford/nlp/models/s
egmenter/chinese/dict/character_list and edu/stanford/nlp/models/segmenter/chine
se/dict/in.ctb
Loading character dictionary file from edu/stanford/nlp/models/segmenter/chinese
/dict/character_list
Loading affix dictionary from edu/stanford/nlp/models/segmenter/chinese/dict/in.
ctb
?]?X?u????j???\?L??o??????????e?D?u?s???????B?b?A??k?|???????????A?w?V?s?????A?
??@?U?^?n???C
?s?????????50?g?~???B?????b?A????s??u???X?u?\?L??o???????A???|???`?|?_????v?T?C
?]?A?????D?u?????B??D?u?q?s?y???H?w???O??~???t????{?A?L?k?X?u?C
--->
[?, ], ?, X, ?u????j???, \, ?L??o??????????e?D?u?s???????B?b?A??k?|???????????A?
w?V?s?????A???@?U?^?n???C, , , , ?s?????????, 50, ?, g?, ~, ???B?????b?A????s??u
???X?u?, \, ?L??o???????A???, |, ???, `, ?, |, ?_????v?T?C, , , , ?, ], ?, A????
?D?u???, ??, B??D?u?q, ?, s?y???H?w???O??, ~, ???t????, {, ?, A?L?k?X?u?C]
}
Processed 1 documents
Skipped 0 documents, error annotating 0 documents
Annotation pipeline timing information:
ChineseSegmenterAnnotator: 0.1 sec.
TOTAL: 0.1 sec. for 34 tokens at 485.7 tokens/sec.
Pipeline setup: 0.0 sec.
Total time for StanfordCoreNLP pipeline: 0.1 sec.
答案 0 :(得分:4)
我编辑了您的问题,将命令更改为您实际用于生成显示输出的命令。看起来你找到了前一个命令:
java -cp "*" -Xmx1g edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,dcoref -file input.txt input.xml
运行英语分析管道,这对中文文本来说效果不佳......
CoreNLP在v3.5.2中对中文的支持仍然有点粗糙,希望在下一个版本中更加顺畅。但是从这里你需要:
-props StanfordCoreNLP-chinese.properties
tokenize
,而是segment
,在StanfordCoreNLP-chinese.properties
中指定为自定义注释器。 (也许我们将在未来的版本中统一这两个......)dcoref
注释器仅适用于英语。有中国的共识,但它没有完全融入管道。如果你想使用它,你当前必须编写一些代码,如here所述。所以,让我们删除它。 (再次,这应该在未来更好地集成)。 -segment.verbose false
CoreNLP
需要超过1GB的RAM。试试2GB。此时,一切都应该好!使用命令:
java -cp "*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP -props StanfordCoreNLP-chinese.properties -annotators segment,ssplit,pos,ner,parse -segment.verbose false -file input.txt
你得到input.txt.xml
的输出。 (我不发布它,因为它长了几千行......)
更新CoreNLP v3.8.0:如果使用(2017年当前)CoreNLP v3.8.0,则会有一些变化/进展:(i)我们现在使用注释器{{1}对于所有语言而言,它并不需要为中文加载自定义注释器; (ii)默认情况下,详细关闭详细分段; (iii)[负面进展]要求tokenize
之前的lemma
注释器要求,即使它对中国人来说是无操作的; (iv)现在可以为中文提供共识,调用为ner
,这需要先前的注释器提及,其统计模型需要相当大的记忆。把它们放在一起,你现在对这个命令很好:
coref