import re class TextSplitter: def __init__(self, min_length=100, max_length=300): """ 初始化文本分段器 :param min_length: 目标段落最小长度 :param max_length: 目标段落最大长度 """ self.min_length = min_length self.max_length = max_length # 匹配标点符号的正则表达式,作为分段点(中文和英文标点) # 这些标点符号通常表示一个完整句子的结束 self.sentence_ending_punct = re.compile(r'([。?!.!?])') def split_text(self, text): """ 将文本分割成符合长度要求的段落,仅使用标点符号分割 :param text: 待分割的原始文本 :return: 分割后的段落列表 """ if not text: return [] # 自动判断原始文本长度 original_length = len(text) print(f"原始文本长度: {original_length} 字符") # 如果原始文本长度小于最小长度,直接返回 if original_length <= self.min_length: return [text.strip()] # 将文本分割成完整句子(保留标点符号) parts = self.sentence_ending_punct.split(text) sentences = [] # 重组句子,确保标点符号与前面的文本在一起 for i in range(0, len(parts)-1, 2): sentence = (parts[i] + parts[i+1]).strip() if sentence: # 跳过空句子 sentences.append(sentence) # 如果没有找到任何标点符号,将整个文本作为一个段落 if not sentences: return [text.strip()] # 合并句子形成段落,确保在长度范围内 paragraphs = [] current_paragraph = "" for sentence in sentences: # 尝试添加当前句子 temp = current_paragraph + (" " if current_paragraph else "") + sentence # 检查添加后是否超出最大长度 if len(temp) > self.max_length: # 如果当前段落不为空,先保存当前段落 if current_paragraph: paragraphs.append(current_paragraph) current_paragraph = sentence else: # 如果单个句子就超过最大长度,也必须接受(避免分割句子) paragraphs.append(sentence) current_paragraph = "" else: current_paragraph = temp # 添加最后一个段落 if current_paragraph: paragraphs.append(current_paragraph) # 检查是否有段落短于最小长度,如果有则与下一段合并 i = 0 while i < len(paragraphs) - 1: if len(paragraphs[i]) < self.min_length: # 合并当前段落和下一段落 paragraphs[i] = paragraphs[i] + " " + paragraphs[i+1] del paragraphs[i+1] else: i += 1 print(f"分割后段落数量: {len(paragraphs)}") return paragraphs # 使用示例 if __name__ == "__main__": # 示例文本 sample_text = """ 最近,晓蕾又上热搜了! 咋回事呢?原来,她和老公刘剑一起开了直播带货的副业。但特意声明:她早就离开了上海电视台的编制,也不拿电视台的工资。换句话说,现在卖东西,完全是私营业态。 这事儿一下子引爆了大家的八卦魂。毕竟,明星主持扎堆直播间,也不算新鲜事。但还是挺多人纳闷:这些当年的 "话筒头牌",是不是集体选择摆烂了? 其实,晓蕾和刘剑干脆落落大方,在直播间直接回应了这点。俩人意思很明确:“我们不是来拉低职业口碑的”。而且还耐心解释了自己转行的理由。 曾经的大佬,变成了烟火气 说到晓蕾,不了解点她背景都不好意思讨论人家。当年上视新闻部的 "当家花旦",光学历和气质,足够秒杀隔壁主持圈的八条街。而刘剑,早年可是 "台柱子",播音腔精致到令人耳膜怀孕。照理来说,这样一对,在编制铁饭碗里躺平一辈子没毛病。 可人家偏不。 晓蕾说过这样一句话:“其实,我就是个普通人。” 真的那么普通吗?她不这么说,没人敢忘了她的标杆履历啊!她离开台里后,居然一头扎进了童语言教育这个赛道,一干就是十年,让机构做到了业内小圈子的爆款水准。 而这次直播,打的商品也不混乱,主打性价比和实用属性,晓蕾每件商品还得亲测过。如果你觉得她自吹自擂,建议去看看她直播间的粉丝评论。大家的意思是:晓蕾推品 = 放心买。 刘剑这枚 “前一哥”,更狠! 说晓蕾牛,别忘了,刘剑十年前也上演了一场 “豪赌”。那个年代,辞去电视台稳定工作,和 “打水漂” 差不多。 可是刘剑敢把梭全下,为啥?因为他看中了播音考生和辅导课程的市场,那时还没有多少人扎堆干这块,他觉得这是个机会。 果然,就这么辞了职,工作的腰板从跟组织吃工资,摇身变成了名副其实的事业单位 —— 自己家老板。虽然后来也是磕磕绊绊,但终究从试验田里掘出了一片肥沃地。 主持人的 “下海”,是换方向走 有人觉得,曾经的新闻人、主持人 “跑去带货”,肯定是混不下去了。你要放在十年前,这种联想不稀奇,可现在不一样了。大环境变了,传统媒体是真的在互联网时代被打败得找不到调。 原来电视频道的观众,现在早转移到手机端,看知乎、刷短视频,甚至晚上蹲个带货直播会。你说新闻节目的高冷主播,现在换脸做带货主持,是不是 “落魄”?未必。 晓蕾夫妻这一波,实际上是转型很成功的范例。不管带啥网红货,他们俩把品质第一的逻辑摆明白了。这样的主播,不止卖产品,更卖信誉,靠着时间积攒了观众的信任。 直播间哪门子 LOW?明明是主战场 网友说得有趣:“谁嫌直播带货 LOW,谁就输定了。” 道理没跑儿,移动互联网成了咱生活重心,生意也跟着迁移。这是明显趋势,看不懂的还真不想赚钱了。 而且,做直播一点不轻松。站几个小时口播、随时照顾弹幕情绪,这比坐着念提词器辛苦多了。像晓蕾和刘剑这样的 “摸鱼资历”,能转过身来赚饭钱,这不是 “混”,是 “拼” 啊。 别说传统意义的职业崇拜消失殆尽,你觉得稳如狗的岗位,说散架就散。老一辈金饭碗情结,对于下一代新创别说香,而是种被淘汰跑赢速度内心创新积极点。 我不是电视台员工了,早就离职 10 年了。""" # 创建分段器实例,设置目标段落长度范围 splitter = TextSplitter(min_length=10, max_length=20) # 分割文本 paragraphs = splitter.split_text(sample_text) # 打印结果 print("\n分割结果:") for i, para in enumerate(paragraphs, 1): print(para)