java 拆分句子,并保留分隔符

JAVA中文文档分句工具 1针对英文文本文件进行分句(按照句号、分号、逗号进行分句)。2支持批量文件分句频度统计。 3针对分句后的结果进行频度统计,针对分句结果进行保存。5.根据分句频度信息进行排序 立即下载

BreakUpSentence.java

package com.example.demo.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 功能:拆分句子
 * 详情:根据分隔符拆分句子,并且保留分隔符。拆分后的句子限制字数是10以内
 *
 * 拆分规则:
 *      分隔符(英文4个,中文4个) ,.?!,。?!
 *      最大字数限制(含标点):10
 *      字数若超过限制,则在前一个分隔符切分。若前面没有分隔符,则在下一个分隔符切分
 *
 * 句子案例:
 *      您好,请问可以听见吗?
 *      不好意思,这个我不会哎!
 *      很抱歉打扰到您了,祝您生活愉快,再见。
 *      据报道,刘德华(华仔)日前为庆祝官方粉丝后援会华仔天地32周年,特地举办线上聚会,不仅献唱5首歌,还罕见谈到妻子和孩子的近况,相当宠粉,他也自嘲过去1年因生病和疫情影响巡演取消,发现自己眼角多了皱纹还长出白发,近日,他在后援会晒出近照,真实状态也曝光了。
 */
public class BreakUpSentence {
    /** 句子结束符. */
    private static final String SEPARATOR_REGEX = "[,.?!,。?!]";

    /** 字数限制(包含标点). */
    private static final Integer SIZE = 10;

    public static void main(String[] args) {
        //1. 需要拆分的句子
        String sentence = "很抱歉打扰到您了,祝您生活愉快,再见。";
        System.out.println("原句子:" + sentence);

        //2. 需要分割的文本
        String[] words = splitSentence(sentence);

        //3. 输出 words
        System.out.println("\n拆分后的句子:");
        Arrays.stream(words).forEach(System.out::println);

        //4. 限制拆分后的句子的字数在10位以内
        System.out.println("\n正在处理每个句子允许的字数是10以内中.....");
        List<String> wordList = limitNumber(words);

        //5. 输出限制后的数据
        System.out.println("\n最终处理完后的数据是: ");
        wordList.stream().forEach(word -> {
            System.out.println("word = " + word + "----------->length = " + word.length());
        });
    }

    /**
     * 通过分隔符拆分句子,并保留分隔符
     *
     * 例如:很抱歉打扰到您了,祝您生活愉快,再见。
     * 根据分隔符拆分:
     *      很抱歉打扰到您了,
     *      祝您生活愉快,
     *      再见。
     *
     * @return
     */
    public static String[] splitSentence(String sentence){
        //1. 定义匹配模式
        Pattern p = Pattern.compile(SEPARATOR_REGEX);
        Matcher m = p.matcher(sentence);

        //2. 拆分句子[拆分后的句子符号也没了]
        String[] words = p.split(sentence);

        //3. 保留原来的分隔符
        if(words.length > 0){
            int count = 0;
            while(count < words.length){
                if(m.find()){
                    words[count] += m.group();
                }
                count++;
            }
        }
        return words;
    }

    /**
     * 限制拆分后的句子的字数包括分隔符在10位以内
     *
     * 例如:
     * 句子:很抱歉打扰到您了,祝您生活愉快,再见。
     * 根据分隔符拆分后:
     *      很抱歉打扰到您了,
     *      祝您生活愉快,
     *      再见。
     * 限制字数后:
     *      很抱歉打扰到您了,
     *      祝您生活愉快,再见。
     *
     * @param words
     * @return
     */
    public static List limitNumber(String[] words){
        //1. 存储限制字数的数据
        List<String> wordList = new ArrayList<>();

        //2. 限制字数在10以内
        int wordsLength = words.length;
        for(int i = 0; i < wordsLength; i++){
            // 循环获取拆分后的每个句子
            String word = words[i];

            // 每个句子的长度
            int length = word.length();
            System.out.println("word = " + word + "-------------->length = " + length);

            // 当字数>=10,直接存储到wordList
            if(length >= SIZE){
                wordList.add(word);
            }else{
                // 防止ArrayIndexOutOfBoundsException
                if(i+1 >= wordsLength){
                    wordList.add(word);
                    return wordList;
                }

                // 获取下一个句子的长度
                String nextWord = words[i+1];
                int nextLength = nextWord.length();

                // 如果上一个句子的长度 + 下一个句子的长度 <= 10,那么拼接成一个句子
                int totalLength = length + nextLength;
                if(totalLength <= 10){
                    wordList.add(word + nextWord);
                    i++;
                }else{
                    wordList.add(word);
                }
            }
        }
        return wordList;
    }
}

输出

原句子:很抱歉打扰到您了,祝您生活愉快,再见。

拆分后的句子:
很抱歉打扰到您了,
祝您生活愉快,
再见。

正在处理每个句子允许的字数是10以内中.....
word = 很抱歉打扰到您了,-------------->length = 9
word = 祝您生活愉快,-------------->length = 7

最终处理完后的数据是: 
word = 很抱歉打扰到您了,----------->length = 9
word = 祝您生活愉快,再见。----------->length = 10
【回归预测】GRNN广义回归神经网络-MATLAB 广义回归神经网络(GRNN)是一种基于径向基函数(RBF)的神经网络模型,主要用于非线性回归任务。与传统的回归分析方法相比,GRNN具有更强的非线性映射能力和学习速度,能够快速逼近复杂的非线性关系。输入层、模式层、求和层和输出层。输入层接收输入数据,模式层通过径向基函数将输入映射到高维空间,求和层对模式层的输出进行加权求和,最后输出层生成预测结果。GRNN的核心思想是利用高斯核函数计算输入与训练样本之间的相似度,然后根据相似度加权平均得到预测值。 阅读详情

相关推荐

稳定双共轭梯度法BiCGSTAB流程

稳定双共轭梯度法BiCGSTAB流程

abner361的博客 1154

句子分割 保留标点符号

/** * 根据标点符号进行句子拆分,并且保留句子结尾符号 * */ public String[] splitSentence(String cmt){ /*正则表达式:句子结束符*/ String regEx=",|\\.|\\?|!|:|;|~|,|:|。|!|;|?| "; Pattern p =Pattern.compile(regEx);

gloryzyf 6257

Tribon Vitesse开发教程(一)

Tribon Vitesse简介 Tribon Vitesse是Tribon提供给Python编程语言的编程接口,它是一系列的API。使用Python的语法调用这些API,结合Python语言自身的语法生成的程序叫做Vitesse程序。Vitesse是法语“速度”的意思,读作“为戴斯”。使用Tribon Vitesse可以直接访问Tribon产品信息模型和使用Tribon应用程序的功能,以控制设计

forevermemory的专栏 2589

java截取字符串并保留分隔符

/** * 通过分隔符拆分句子,并保留分隔符 * * @return */ public static String[] splitSentence(String sentence,String chars){ //1. 定义匹配模式 Pattern p = Pattern.compile(chars); Matcher m = p.matcher(sentence); //2. 拆分...

fanfan_618的博客 853

Qt Creator菜单栏消失的终极修复指南:从快捷键冲突到设置恢复

本文详细解析了Qt Creator菜单栏消失的常见原因及修复方法,包括快捷键冲突排查、配置文件重置和界面模式切换等解决方案。特别针对Qt开发者遇到的菜单栏显示问题,提供了从简单快捷键操作到深度配置修改的全方位指南,帮助用户快速恢复Qt Creator的正常使用。

weixin_27240351的博客 338

OpenCV 开闭运算

开运算和闭运算是将腐蚀和膨胀按照一定的次序进行处理。 但这两者并不是可逆的,即先开后闭并不能得到原来的图像。 开运算 开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。 闭运算 闭运算与开运算相反,是先膨胀后腐蚀,作用是消除/“闭合”物体里面的孔洞,特点:可以填充闭合区域。 cv.morphologyEx(img, op, kernel) img: 要处理的图像 op: 处理方式:若进行开运算,则设为cv.MORPH_OPEN,若进行闭

꧁༺ʚvv༒catɞ༻꧂的博客 949

java 句子拆分_java – 将段落拆分为单个句子.我在这里覆盖了所有的基地吗?

如果您不必使用正则表达式,则可以使用Java的内置BreakIterator.以下代码显示了解析句子的示例,但BreakIterator支持其他形式的解析(word,line等).如果您处理不同的语言,也可以选择传入不同的语言环境.此示例使用默认语言环境.String input = "Hello World. "+ "Today in the U.S.A.,it is a nice day! "...

weixin_30341571的博客 559

jQuery 版本怎么选?别一上来就用最新版,老项目里这个坑很常见

jQuery 是一个封装好的 JavaScript 函数库,简称 JQ它的核心理念是jQuery 有 1.x、2.x、3.x 三个主要版本系列2.0 以上版本不再支持 IE6、IE7、IE8版本选择不能只看“新不新”,而要看项目兼容性和实际需求.min.js是压缩版文件,生产环境常用使用 jQuery 前必须先通过<script>正确引入基本就是没引入或引入失败可以快速绑定点击事件.animate()可以快速实现动画效果,但定位属性要设置好。

Web安全工具库 386

Java实现英文段落分句_java英文段落拆分成句(Split an article into sentences)

最近研究一個翻譯系統,對老師上傳的一段文本自動拆分成句,乍一聽好像很簡單哦,split分隔下句號不就完事了嘛!。。。mdzz還是太年輕,一不小心上當了,還有嘆號問好雙引號呢~!當然這個也不算什么,找個正則表達式就好啦^_^!太天真了!!!勞資突然發現英文簡直了,竟然還有縮略詞!!!這尼瑪怎么分析哦,一頓翻山越嶺,發現國內的相關文章有限,對於縮略詞都不能有很好的支持,於是在這個時間段,國內嚴禁翻牆的...

weixin_33415023的博客 850

C语言实现惯导更新算法(机械编排)

四元数可用于描述刚体转动或姿态变换,与方向余弦阵相比,表达简洁。四元数是一个包含四个元素的列向量,列向量的第一个元素表示刚体围绕旋转轴转过的角度大小,其余3个元素代表了旋转轴的方向。

十八与她的博客 1730

AutoSAR EcuM系列01- EcuM模块的功能概述和变体类型

在【ECU的软硬件架构】文章中我们了解ECU的功能和组成,那么ECU具体是怎么启动的呢?我们知道,AutoSAR标准架构有三层,即APPL应用层、RTE层和BSW层。而这些层又被进一步划分为更多单独的组件,如BSW层可能有80多个组件。在ECU启动时,这些组件必须相互交互,有时也必须以某种顺序交互。这些组件的启动顺序由ECU管理器模块或EcuM处理。EcuM负责整个ECU的初始化和去初始化,包括对一些系统模块如。......

1766

Java多个分隔符indexof,java split用多个标点符号拆分,并保留分隔符

String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。注意:竖线"|" 要转义写成 "\\|",还有一些其他的特殊字符是需要转义的 如 \\. \\? 等1.用多个标点拆分strs = str.split("[、,。;?!,.;?!]");strs = str.split("、|,|。|;|?|!|,|\\.|;|\\?|!|]");2.还想保留分隔符,...

weixin_39664995的博客 1249

SerDes系列之码间干扰的概念

码间干扰出现在传输介质或者元器件的带宽小于所发送的信号带宽时,从时域角度来看,传输路径的带宽限制会使发送信号的上升沿的变化速率变慢,有可能对信号造成高频衰减,并影响到实际数字逻辑电平的转换时序。

一只豌豆象的博客 3464

java split保留分隔_java split用多个标点拆分,并保留分隔符

?String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。?注意:竖线"|" 要转义写成 "\\|",还有一些其他的特殊字符是需要转义的 如 \\. \\? 等?1.用多个标点拆分strs = str.split("[、,。;?!,.;?!]");strs = str.split("、|,|。|;|?|!|,|\\.|;|\\?|!|]"); //这个没试...

weixin_39556702的博客 1103

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java split多个字符串分割_java split用多个标点拆分,并保留分隔符

String[] split(String regex)根据给定的正则表达式的匹配来拆分此字符串。注意:竖线"|" 要转义写成 "\\|",还有一些其他的特殊字符是需要转义的 如 \\. \\? 等1.用多个标点拆分strs = str.split("[、,。;?!,.;?!]");strs = str.split("、|,|。|;|?|!|,|\\.|;|\\?|!|]");2.还想保留分隔符,...

weixin_39685674的博客 1889

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java - 如何拆分字符串,同时保留分隔符?

目标:将I have a good friend. shi is beautiful!拆分成I have a good friend.和she is beautiful!,拆分符号是.(点后面有个空格)。 困难:普通的split()会把.去掉。 解决方案:str.split("(?<=\\. )"); 测试下: public static void main(String[] args) { String str = "I have a good friend. shi i.

知道这个有什么用? 1718

java split用多个标点拆分,并保留分隔符

String[] split(String regex) 根据给定的正则表达式的匹配来拆分此字符串。 注意:竖线"|" 要转义写成 "\\|",还有一些其他的特殊字符是需要转义的 如 \\. \\? 等 1.用多个标点拆分 strs = str.split("[、,。;?!,.;?!]"); strs = str.split("、|,|。|;|?|!|,|\\.|;|...

2421

java切割字符串并保留分隔符_如何拆分字符串,同时又保留分隔符?

importjava.util.regex.*;importjava.util.LinkedList;publicclassSplitter{privatestaticfinalPatternDEFAULT_PATTERN=Pattern.compile("\\s+");privatePatternpattern;privatebooleankeep_delimite...

weixin_35782943的博客 754

Java中根据某一分隔符拆分字符串

Java中根据某一分隔符拆分字符串 在Java学习过程中常常需要根据某一特定的分隔符来拆分字符串,这里演示一下: 例如:输入字符串  2015-12-21需要根据“-”来拆分开,成为三段,代码如下: import java.util.Scanner; public class Test8 { public static void main(String[] args){ System.

不二 1万+

java切割字符串并保留分隔符,如何拆分字符串,还要保留分隔符?

I have a multiline string which is delimited by a set of different delimiters:(Text1)(DelimiterA)(Text2)(DelimiterC)(Text3)(DelimiterB)(Text4)I can split this string into its parts, using String.split...

weixin_39830303的博客 445

JAVA中实现多个分隔符拆分字符串

通过查看JAVA API  我们知道String split的源码为: public String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 该方法的作用就像是使用给定的表达式和限制参数 0 来调用两参数 split 方法。因此,所得数组中不包括结尾空字符串。 例如,字符串 "boo:and:foo" 使用这些表达式可生成以下结果:

TBN_MSnail 3747

咦,Java拆分个字符串都这么讲究

提到 Java 拆分字符串,我猜你十有八九会撂下一句狠话,“这有什么难的,直接上 String 类的 split() 方法不就拉到了!”假如你真的这么觉得,那可要注意了,事情远没这么简单。 来来来,搬个小板凳坐下。 假如现在有这样一串字符“沉默王二,一枚有趣的程序员”,需要按照中文的逗号“,”进行拆分,这意味着第一串字符为逗号前面的“沉默王二”,第二串字符为逗号后面的“一枚有趣的程序员”(这不废...

沉默王二 1万+

Java 字符串分割成数组,保留分隔符

Java 字符串分割数组,保留分隔符。 自己记录一个字符传分割方法,适配单个字符分割,多个字符分割。

qiaobing1226的博客 3791

java切割字符串并保留分隔符_java – 如何拆分一个字符串,但也保留分隔符?

你可以使用Lookahead和Lookbehind。喜欢这个:System.out.println(Arrays.toString("a;b;c;d".split("(?<=;)")));System.out.println(Arrays.toString("a;b;c;d".split("(?=;)")));System.out.println(Arrays.toString("a;b;c...

weixin_33021323的博客 2541

Java:StringTokenizer,根据指定分隔符拆分字符串

StringTokenizer,根据指定分隔符拆分字符串

weixin_44843569的博客 2912

按分隔符拆分字符串(java)

这样,我们就可以将每个分割后的字符串都作为一个新的元素,而不是一个数组中的元素。因此,结果数组为 ["one","two","three","four","five","six"]。在本示例中,"|||" 的拆分结果将只包含一些空字符串,所以我们返回一个空数组 []。"one.two.three" 拆分为 "one", "two", "three""four.five" 拆分为 "four", "five"因此,结果数组为 ["easy","problem"]。方法来进行分割,使用的分割符是传入的。

2301_81985649的博客 1516

Java字符串拆分详解

说到 Java 字符串拆分,我们可能会不假思索“这有什么难的,直接上 String 类的 split() 方法不就行了!”假如你真的这么觉得,那可要真的是大错特错了。其中缘由,且听我细细道来。 假如现在有这样一串字符“hello world,一个有趣的程序”,需要按照中文的逗号“,”进行拆分,这意味着第一串字符为逗号前面的“hello world”,第二串字符为逗号后面的“一个有趣的程序”。另外,在拆分之前,要先进行检查,判断一下这串字符是否包含逗号,否则应该抛出异常。 public class Test

qf2019的博客 4027
上一篇: lamda -- 运算
下一篇: java 数组的输出方式总结
脾气很倔呢
博客等级 码龄9年 190粉丝 309原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值