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?
我在使用 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?