gpt4 book ai didi

java - 斯坦福 coreNLP 将段落句子拆分为无空格

转载 作者:行者123 更新时间:2023-12-02 01:34:58 32 4
gpt4 key购买 nike

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

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", "\\.");

但没有效果。

也许我错过了什么?谢谢!

UPD我还尝试使用 PTBTokenizer 对文本进行标记

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 属性会告诉句子分割器在看到“.”时结束句子。作为 token ,但这在 token 生成器未拆分“.”的情况下没有帮助。除了周围的文本到一个单独的标记之外。

您需要:

  • 预处理您的文本(在“cat”后插入一个空格。),
  • 对您的标记或句子进行后处理,以拆分此类案例,或者
  • 找到/开发一个可以将“cat.Cat”拆分为三个标记的标记器。

通常用于报纸文本的标准英语分词器尚未被开发来处理此类文本。

一些相关问题:

Does the NLTK sentence tokenizer assume correct punctuation and spacing?

How to split text into sentences when there is no space after full stop?

关于java - 斯坦福 coreNLP 将段落句子拆分为无空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55352808/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com