【长文本处理】长文本划窗分割算法

长文本划窗切片算法

给定一段长文本,对长文本进行滑动窗口,切成一系列更短的文本,其中切片后的最小文本长度和窗口滑动的步长作为参数,且切分后每段文本都是完整的句子。断句标点可自行限制范围。

这种切割方式可以用于为长文本的数据处理作准备。

实现代码

import re
import numpy as np

class text_cut:
    def __init__(self,min_len =20,step=10, stop_list = None):
        self.min_len = min_len #自定义最短长度
        self.step = step #自定义划窗步长
        if stop_list and isinstance(stop_list,list):
            self.stop_list = stop_list #自定义分割标点符
        else:
            self.stop_list = ['.','!','|','。','!',';',';','?','?',',']
        self.split_patten = '[' + ''.join(self.stop_list) + ']'

    def find_now_index(self,now_point,sum_len_list):
        for i in range(len(sum_len_list)-1):
            if now_point >= sum_len_list[i] and now_point < sum_len_list[i+1]:
                return i+1
        else:
            return 0

    def cut(self,text):
        if not isinstance(text,str):
            raise TypeError
        spilt_text = re.split(self.split_patten,text)
        len_list = np.array([len(x) for x in spilt_text])
        sum_len_list = np.cumsum(len_list)
        result_list = []
        end_point = 0
        pre_index = 0
        while end_point <= sum_len_list[-1]:
            end_point += self.step
            now_index = self.find_now_index(end_point,sum_len_list)
            if np.sum(len_list[pre_index:now_index]) >= self.min_len:
                result_list.append(''.join(spilt_text[pre_index:now_index]))
                pre_index = now_index
        return result_list

def main():
    text = '都市快报讯 “二九”过完是“三九”,目前正是一年最冷的时候。有人开玩笑说,每天在户外,感觉自己像一根行走着的棒冰。\
浙江省气象台统计,2021年的第一个10天(11日至110日),全省平均降水量1毫米,比常年同期偏少93%;全省平均气温3.2℃,比常年同期偏低2.9℃。不仅降水偏少,而且气温偏低。\
在快抱App的杭友圈里,刷屏的帖子不是西湖结冰,就是家里的花缸结冰,或者挂在室外的衣服、毛巾冻住了。\
天寒地冻的日子本周还会继续吗?好消息是,杭州已经明显从“冷冻层”来到了“冷藏层”。杭州市气象台说,目前,冷空气的残余势力已经越来越弱,气温已经在缓慢回升,之所以升温慢,是因为昨天有一股弱冷空气补充影响。'
    c_ = text_cut()
    result_list = c_.cut(text)
    print(result_list)
    print([len(x) for x in result_list])

if __name__ == '__main__':
    main()

#----------------
/usr/local/bin/python3 /Users/zhengyanzhao/PycharmProjects/cut_text/text_cut.py

都市快报讯 “二九”过完是“三九”,目前正是一年最冷的时候
有人开玩笑说,每天在户外,感觉自己像一根行走着的棒冰
浙江省气象台统计,2021年的第一个10天(11日至110日),全省平均降水量1毫米,比常年同期偏少93%
全省平均气温32℃,比常年同期偏低29℃
不仅降水偏少,而且气温偏低在快抱App的杭友圈里,刷屏的帖子不是西湖结冰,就是家里的花缸结冰,或者挂在室外的衣服、毛巾冻住了
天寒地冻的日子本周还会继续吗好消息是,杭州已经明显从“冷冻层”来到了“冷藏层”

[29, 26, 55, 20, 62, 39]
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值