TxT2Docx/text_splitter.py

140 lines
7.2 KiB
Python
Raw Normal View History

2025-09-26 15:49:06 +08:00
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)