斯坦福NLP WordsToSentencesAnnotator:分裂\ n不工作

时间:2014-04-10 19:13:31

标签: java regex stanford-nlp

我无法使用Stanford NLP WordsToSentencesAnnotator在\ n或\ r \ n上分割句子。我只是尝试使用此处描述的代码:http://nlp.stanford.edu/software/sutime.shtml,但我使用自定义拆分器

public static void main(String[] args) {
Properties props = new Properties();
AnnotationPipeline pipeline = new AnnotationPipeline();
pipeline.addAnnotator(new PTBTokenizerAnnotator(false));
pipeline.addAnnotator(new WordsToSentencesAnnotator(false,"\n"));
pipeline.addAnnotator(new POSTaggerAnnotator(false));
pipeline.addAnnotator(new TimeAnnotator("sutime", props));

...

我正在使用版本1.3.5的corenlp jar。我也尝试使用\ r,\ r \ n等代替\ n,但似乎没有任何工作。有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

嗯,这不是我构建管道的方式,但你试过吗

WordsToSentencesAnnotator newlineSplitter(false, "\n");

所以,我会尝试更多的东西:

Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, pos, lemma, ner");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

与管道交互。 " SUTime注释通过包含ner注释器自动提供给StanfordCoreNLP管道"根据斯坦福NLP页面,因此您应该能够完成同样的事情。你的句子分裂注释器是ssplit。以下选项适用于ssplit(再次从Stanford NLP页面获取):

  • ssplit.eolonly:只对换行符分句。与" -tokenize.whitespace true"一起使用效果很好,在这种情况下,StanfordCoreNLP会将输入视为每行一个句子,只分隔空格上的单词。
  • ssplit.isOneSentence:每个文件都被视为一个句子,根本没有句子分裂。
  • ssplit.newlineIsSentenceBreak:是否将换行视为句子中断。此属性有3个合法值:"始终","从不"或" 2"。默认值是"两个"。 "总是"意味着换行总是句子中断(但每行仍然可能有多个句子)。这通常适用于具有柔和换行符的文本。 "从未"意味着为了句子分裂而忽略换行符。当仅使用非空白字符来确定句子中断时,这是合适的。 " 2"意味着两个或多个连续的换行符将被视为句子中断。在处理具有强硬换行的文本和段落之间的空白行时,此选项可能是合适的。
  • ssplit.boundaryMultiTokenRegex:值是一个多标记句子边界正则表达式。
  • ssplit.boundaryTokenRegex:
  • ssplit.boundariesToDiscard:
  • ssplit.htmlBoundariesToDiscard
  • ssplit.tokenPatternsToDiscard: