背景
最近有一个文本切分的模块,主要作用是将一段文本切分成单句。仿照重构之前的版本使用正则表达式去匹配标点符号,然后按照「单句文本长度最大值」作为阈值,将整段文本切分为多个句子。大致的代码如下:
// 按句号分割
func splitWithPeriod(text string) []string {
reg := regexp.MustCompile(`([\n\t])([^”"’])`)
// use reg to match newline and tab space
}
// 按逗号分割
func splitWithComma(text string) []string {
reg := regexp.MustCompile(`([,,])([^”"’])`)
// use reg to match comma
}
func splitForce(text string) []string {
// ....
}
func Split(text string) []string {
var results []string
for _, v := range splitWithPeriod(text) {
if len(v) < maxLen {
results = append(results, v)
continue
}
for _, vv := range splitWithComma(v) {
if len(vv) < maxLen {

文章描述了一个对文本切分模块的重构过程,最初使用正则表达式按句号和逗号切分,遇到长英文段落导致单词被错误切割的问题。为解决此问题,引入了按空格切分,并采用了责任链设计模式降低圈复杂度。进一步优化中,作者采用了Go语言的pipeline模式,通过channel异步处理,简化了代码并提升了性能。最后,通过提取正则表达式为全局变量并测试性能,证明了重构的效果。
最低0.47元/天 解锁文章
493

被折叠的 条评论
为什么被折叠?



