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
相关产品推荐
相关产品推荐

