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

使用Wordninja处理文本时,如何避免拆分浮点数?

解决wordninja拆分浮点数的问题

可以通过先暂存浮点数、处理后恢复的思路解决这个问题——先把文本里的浮点数用占位符替换,等wordninja完成单词拆分后,再把占位符换回原始浮点数,具体实现如下:

实现思路

  1. 用正则匹配文本中所有常见格式的浮点数(比如1.23、.45、67.)
  2. 把匹配到的浮点数替换成唯一占位符,同时记录占位符与浮点数的映射关系
  3. 对替换后的文本执行wordninja拆分
  4. 将拆分结果中的占位符还原为原始浮点数

修改后的完整代码

import wordninja
import re

def split_adjacent_words(description):
    # 匹配常见浮点数格式的正则表达式
    float_pattern = re.compile(r'\d+\.\d*|\.\d+|\d+\.')
    float_map = {}
    placeholder_count = 0

    # 定义回调函数:替换浮点数为唯一占位符,并记录映射
    def replace_float(match):
        nonlocal placeholder_count
        placeholder = f"__FLOAT_{placeholder_count}__"
        float_map[placeholder] = match.group()
        placeholder_count += 1
        return placeholder

    # 替换文本中的浮点数为占位符
    temp_text = float_pattern.sub(replace_float, description)
    # 执行wordninja单词拆分
    split_words = wordninja.split(temp_text)
    # 还原占位符为原始浮点数
    final_words = [float_map.get(word, word) for word in split_words]
    return " ".join(final_words)

# 应用到DataFrame(自动跳过空值)
df['description_clean'] = df['description'].dropna().apply(split_adjacent_words)

细节说明

  • 正则表达式\d+\.\d*|\.\d+|\d+\.覆盖了大部分常见浮点数格式,如果你的数据里有带千分位的浮点数(比如1,234.56),可以调整正则为\d{1,3}(,\d{3})*\.\d*|\.\d+|\d{1,3}(,\d{3})*\.)来匹配
  • 占位符采用__FLOAT_{数字}__的格式,能有效避免和文本中的正常单词冲突
  • 测试示例:输入文本"thisisaproductwith2.5kgweight",处理后会得到"this is a product with 2.5 kg weight",浮点数完整保留未被拆分

内容的提问来源于stack exchange,提问作者hande gülbağcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:44