将文本拆分为句子时,斯坦福 NLP 的 WordsToSentencesAnnotator 的默认行为是什么?

What is the default behavior of Stanford NLP's WordsToSentencesAnnotator when splitting a text into sentences?

查看 WordToSentenceProcessor.javaDEFAULT_BOUNDARY_REGEX = "\.|[!?]+"; 让我认为文本会根据 .!? 分成句子。

但是,如果我将字符串 D R E L I N. Okay. 作为输入传递,例如使用命令行界面:

java -cp "*" -Xmx2g edu.stanford.nlp.pipeline.StanfordCoreNLP 
             -annotators tokenize,ssplit  -file test.txt

它returns只是一句话D R E L I N. Okay.而不是两句话['D R E L I N.', 'Okay.']。为什么?

它确实对这些字符进行了拆分,但是只有当它们作为自己的标记出现时才会出现,而不是出现在缩写词的末尾,例如 "etc."。所以这里的问题不是句子拆分器,而是分词器认为 "N." 是一个缩写,因此不会将 "N." 分成两个单独的分词。如果您事先知道您的文本不包含任何缩写,最简单的做法是在使用 CoreNLP 处理之前拆分所有末尾包含句点的标记。

您的输入将是 D R E L I N . Okay .

如果您的输入还包含缩写,事情会稍微复杂一些,因为您必须编辑分词器的规则。有关如何编辑分词器规则的高级说明,请参阅“stanford corenlp, splitting sentences, abbreviation exceptions”。