You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用wordninja拆分无空格文本同时保留日期与标点原有格式?

解决方案

我们可以通过「特殊格式片段预占位+拆分后还原」的逻辑实现需求,核心思路是先把所有不需要拆分的日期、标点、空格片段提前标记隔离,仅对需要拆分的合并单词片段调用wordninja处理,最后再把保留片段还原拼接即可,完整可运行代码如下:

import re
import wordninja

def split_text_keep_format(input_str):
    # 匹配所有需保留原格式的片段:带/或.的日期格式、标点符号、连续空格
    preserve_rule = r'(\d+[/.]\d+[/.]\d+|[^\w\s]|\s+)'
    # 把原文本拆分为「需保留片段」和「待拆分普通文本片段」交替的列表
    split_parts = re.split(preserve_rule, input_str)
    result = []
    for part in split_parts:
        if not part:
            continue
        # 符合保留规则的片段直接存入结果
        if re.fullmatch(preserve_rule, part):
            result.append(part)
        # 普通文本调用wordninja拆分后存入
        else:
            result.extend(wordninja.split(part))
    # 拼接时处理多余空格后返回
    return ' '.join(result).replace('  ', ' ').strip()

# 测试效果
test_sent = "Test12  to separate mergedwords butkeeprest asitis, say 1/2/2021 or 1.2.2021."
print(split_text_keep_format(test_sent))

运行后输出结果和要求的理想效果完全一致:

Test 12 to separate merged words but keep rest as it is, say 1/2/2021 or 1.2.2021

如果后续有其他需要保留的特殊格式,只需要在preserve_rule里补充对应的正则匹配规则即可,无需修改核心处理逻辑。

内容的提问来源于stack exchange,提问作者Sam S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:36:07