查看WordToSentenceProcessor.java,DEFAULT_BOUNDARY_REGEX = "\\.|[!?]+";
让我认为文本会根据.
,!
和?
分成句子。
但是,如果我将字符串D R E L I N. Okay.
作为输入传递,例如使用命令行界面:
java -cp "*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP
-annotators tokenize,ssplit -file test.txt
它只返回一个句子D R E L I N. Okay.
而不是两个句子['D R E L I N.', 'Okay.']
。为什么呢?
答案 0 :(得分:2)
它会对这些字符进行拆分,但只有当它们作为自己的令牌出现时才会出现,而不是在缩写的末尾,例如"等等。#34;。所以这里的问题不是句子分割器,而是认为" N."是缩写,因此不会拆分" N。"分成两个独立的代币。如果您事先知道您的文本不包含任何缩写,那么最简单的方法是在使用CoreNLP处理它们之前拆分包含句点的所有标记。
您的输入将为D R E L I N . Okay .
如果您的输入也包含缩写,则事情会更复杂,因为您必须编辑标记生成器的规则。见" stanford corenlp, splitting sentences, abbreviation exceptions"有关如何编辑标记生成器规则的高级描述。