使用Stanford NLP拆分含句点文本时的分句异常问题
包含数字字符串多句点的句子拆分方案
问题核心是默认的句子分割逻辑会把24-18.07N.里的末尾句点误判为数字格式的一部分(和前面的小数句点归为一类),导致本该拆分的两个句子被合并成一个。以下是几个实用的解决思路:
自定义分割规则
针对「字母+句点+空格+大写单词」的模式,添加专门的边界检测规则。比如如果用Stanford CoreNLP这类工具,可以通过配置正则来指定句子终止符:val props = Properties() props.setProperty("annotators", "tokenize,ssplit") // 匹配末尾的.!?,且后面是空格+大写字母开头的内容 props.setProperty("ssplit.boundaryTokenRegex", "[.!?]+(?=\\s+[A-Z])") val pipeline = StanfordCoreNLP(props) val annotation = Annotation("First sentence 24-18.07N. Next sentence.") pipeline.annotate(annotation) val sentences = annotation.get(CoreAnnotations.SentencesAnnotation::class.java)预处理文本标记特殊句点
手动识别并替换容易混淆的句点,分割后再还原。比如把N. Next这种模式里的句点换成临时标记,避免被分割器忽略:val text = "First sentence 24-18.07N. Next sentence." // 匹配「字母+句点+空格+大写字母」的组合,替换句点为临时标记 val processedText = text.replace(Regex("([A-Z])\\.\\s+([A-Z])"), "$1### $2") val document = Document(processedText) val sentences = document.sentences().map { it.replace("###", ".") }调整分割器参数
如果使用的NLP工具支持参数配置,直接修改默认的分割规则:比如关闭“数字中的句点不触发分割”的逻辑,或者添加例外——当句点后紧跟空格和大写开头的单词时,强制触发句子分割。
内容的提问来源于stack exchange,提问作者lostintranslation
相关产品推荐
相关产品推荐

