将文本拆分为句子时,斯坦福 NLP 的 WordsToSentencesAnnotator 的默认行为是什么?
What is the default behavior of Stanford NLP's WordsToSentencesAnnotator when splitting a text into sentences?
查看 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
它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”。
查看 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
它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”。