Python文本预处理函数故障:随机字符与循环重复问题排查
排查你的文本预处理函数问题
嘿,我来帮你揪出这两段代码里的问题,都是变量命名和引用的小疏忽导致的:
初始代码的问题
- 变量名冲突覆盖数据集:你写了
for data in data:,这里把循环遍历的元素也命名为data,直接覆盖了传入函数的原始数据集参数。如果你的data是字符串(比如读取txt时没按行拆分,拿到的是整个文本字符串),遍历的时候会把每个字符当成单独的元素处理,对单个字符分词自然就返回随机的单个字符(像"j"","i"这种)。 - 拼写错误:
text_joined = " ".join(textwords)里的textwords少了下划线,应该是text_words——正常运行这行应该会报NameError,可能你测试时的临时情况刚好没触发?
修改后代码的问题
你把循环变量改成了row是对的,但犯了另一个错误:分词时用了整个数据集data而不是当前行row!也就是nltk.word_tokenize(data)这行,每次循环都对整个原始数据集做分词,然后把这个结果重复添加到data_prep里,所以返回的是多次重复的相同分词结果,看起来就像进入了循环。
修正后的正确代码
def clean(data): data_prep = [] # 用row作为循环变量,避免覆盖传入的data参数 for row in data: # 对当前行(row)分词,而不是整个数据集 tokenized_words = nltk.word_tokenize(row) text_words = [token.lower() for token in tokenized_words if token.isalnum()] text_words = [word for word in text_words if word not in stop_words] text_joined = " ".join(text_words) data_prep.append(text_joined) return data_prep
额外小建议
确保传入函数的data是可迭代的文本列表(比如每一行是一条待处理的文本)。如果是从txt文件读取数据,建议用类似下面的代码读取,避免拿到整个字符串:
with open("your_data.txt", "r", encoding="utf-8") as f: # 按行读取,去掉空行和首尾空格 data = [line.strip() for line in f if line.strip()]
内容的提问来源于stack exchange,提问作者RinaJ
相关产品推荐
相关产品推荐

