Stanford coreNLP 拆分没有空格的段落句子

Stanford coreNLP splitting paragraph sentences without whitespace

我在使用 stanford 的句子注释器时遇到了问题。 作为输入,我得到了包含句子的文本,但其中某些部分的点后没有空格。像这样:

Dog loves cat.Cat loves mouse. Mouse hates everybody.

所以当我尝试使用 SentenceAnnotator - 我得到 2 个句子

Dog loves cat.Cat loves mouse.

Mouse hates everybody.

这是我的代码

Annotation doc = new Annotation(t);
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,coref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(doc);
List<CoreMap> sentences = doc.get(CoreAnnotations.SentencesAnnotation.class);

我也试过添加属性

props.setProperty("ssplit.boundaryTokenRegex", "\.");

但没有效果。

也许我遗漏了什么? 谢谢!

更新 我还尝试使用 PTTBokenizer

对文本进行标记化
PTBTokenizer ptbTokenizer = new PTBTokenizer(
        new FileReader(classLoader.getResource("simplifiedParagraphs.txt").getFile())
        ,new WordTokenFactory()
        ,"untokenizable=allKeep,tokenizeNLs=true,ptb3Escaping=true,strictTreebank3=true,unicodeEllipsis=true");
List<String> strings = ptbTokenizer.tokenize();

但是 tokenizer 认为 cat.Cat 是一个单词,不会拆分它。

这是一个管道,其中句子拆分器将识别标记器提供的标记的句子边界,但句子拆分器仅将相邻标记分组为句子,它不会尝试合并或拆分它们。

如您所见,我认为 ssplit.boundaryTokenRegex 属性 会告诉分句器在看到“.”时结束句子。作为标记,但这在标记器未拆分“。”的情况下无济于事。除了周围的文本之外,还有一个单独的标记。

您需要:

  • 预处理您的文本(在 "cat." 之后插入一个 space),
  • 后处理您的标记或句子以像这样拆分案例,或者
  • find/develop 可以将 "cat.Cat" 拆分为三个标记的分词器。

None 的标准英语分词器通常用于报纸文本,已开发用于处理此类文本。

一些相关问题:

Does the NLTK sentence tokenizer assume correct punctuation and spacing?