文本智能切分:满足长度限制与自然断句
在最近的项目开发过程中,我频繁遇到一个需求:将用户输入的长文本智能切分成多个段落,每个段落的长度需控制在特定范围内,同时还要遵循自然语言的断句规则。把实现记录一下
复制import org.apache.commons.lang.StringUtils;
import java.util.*;
public class TextSpiltUtils{
private static final int MAX_LENGTH = 670;
private static final List<Character> PUNCTUATION_PATTERN = Arrays.asList('。', '!', '?', ';', ',', ',', '.', '!', '?', ';');
public static List<String> splitText(String text) {
List<String> segments = new ArrayList<>();
int contentLength = text.length();
int curIndex = 0;
while (curIndex < contentLength) {
// 计算当前分段的结束位置(不超过内容长度)
int endIndex = Math.min(curIndex + MAX_LENGTH, contentLength);
// 从后向前寻找最近的标点符号作为分割点,在到达切分文本开始仍未寻找到标点,直接硬切分
for (int i = endIndex - 1; i >= curIndex; i--) {
if (PUNCTUATION_PATTERN.contains(text.charAt(i))) {
endIndex = i + 1; // 包含标点符号本身
break;
}
}
// 截取分段并处理空内容
String segment = text.substring(curIndex, endIndex).trim();
if (!segment.isEmpty()) {
segments.add(segment);
}
// 更新当前索引到下一个分段的起始位置
curIndex = endIndex;
}
return segments;
}
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步