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

如何删除文本中不在自定义vocabulary词表内的token?

代码运行无效的核心原因
  • 变量名拼写错误:词表定义时命名为vocbulary,后续判断逻辑里引用的是vocabulary,变量名不匹配导致判断逻辑实际使用的词表无效
  • 入参格式错误:texte被定义为只有一个字符串元素的列表,但nltk.word_tokenize要求传入字符串类型参数,直接传入列表会触发类型错误,后续re.sub操作的入参也是列表类型,不符合方法要求
  • 大小写匹配问题:词表中存储的Get等词为首字母大写格式,而文本中对应的词为小写get,严格匹配下无法命中词表
  • 替换逻辑错误:每次循环都基于原始文本texte执行替换,之前的替换结果会被后续操作完全覆盖,同时re.sub会触发部分字符匹配问题,比如替换单字a时会误删其他单词里的a字符
修正方案

建议直接筛选符合要求的token再拼接成新文本,无需用正则替换,执行效率更高也不会出现匹配偏差:

import nltk
# 修正词表拼写,转为集合提升查找效率
vocabulary = {'Get','owns', 'about', 'for', 'to', 'by', 'person', 'movie', 'school', 'Movie', 'Person'}
# 直接定义为字符串,若要保留原列表格式可改为texte = texte[0]取出字符串元素
texte = "good morning i oll know most terrible things you've done in your life up to this point but clearly a commons ot of balance to get a sign to my class i professor annile's keeting and this is criminal law one hundred or as i prefered to college ow to get away with murder\nunlike many of my colleagues i will not be teaching you how to study the law a theorize about it but rather how to practise what was the men"
# 分词后筛选符合词表要求的token
valid_tokens = [word for word in nltk.word_tokenize(texte) if word in vocabulary]
# 拼接为最终文本
x = ' '.join(valid_tokens)

如果需要不区分大小写匹配,可以调整判断逻辑:

# 词表统一转为小写存储
vocabulary_lower = {w.lower() for w in vocabulary}
valid_tokens = [word for word in nltk.word_tokenize(texte) if word.lower() in vocabulary_lower]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:39:00