一次模块优化——基于Go chan的流水线模式

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

背景

最近有一个文本切分的模块,主要作用是将一段文本切分成单句。仿照重构之前的版本使用正则表达式去匹配标点符号,然后按照「单句文本长度最大值」作为阈值,将整段文本切分为多个句子。大致的代码如下:

// 按句号分割
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 {
   
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值