如何用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.
相关产品推荐
相关产品推荐

