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

Python开发简单自定义动态tokenizer时输出不符合预期如何解决

问题原因排查

  • Python字符串为不可变对象,str.replace()方法仅返回替换后的新字符串,不会修改原字符串,原代码未接收替换结果,所有修改操作均未生效。
  • sent.split('<SPLIT>')仅返回拆分后的列表,未赋值给变量,最终返回的还是未处理的原始字符串。
  • 正则\W会匹配单引号',与预期中保留's为独立分词的需求冲突。
  • 拆分后会产生大量空字符串(首尾位置、连续分隔符位置),未做过滤处理。

正确实现方案

直接通过正则匹配目标分词单元,逻辑更简洁,匹配结果完全符合预期:

import re

def tokenize(sent):
    # 匹配规则:单词 / 's后缀 / 连续数字 / 非单词非空白的独立符号
    pattern = r"[a-zA-Z]+|'s|\d+|[^\w\s]"
    tokens = re.findall(pattern, sent)
    # 将数字字符串转为整数,匹配预期的数字格式
    tokens = [int(token) if token.isdigit() else token for token in tokens]
    return tokens

sent = "Who's kid are you? my ph. is +1-6466461022.Bye!"
tokens = tokenize(sent)
print(tokens)

运行后输出结果:

["Who", "'s", "kid", "are", "you", "?", "my", "ph", ".", "is", "+", "1", "-", 6466461022, ".", "Bye", "!"]

内容的提问来源于stack exchange,提问作者Parsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:09