如何从文本文件提取句子并移除长度≤3的单词?
问题分析与高效解决方案
嘿,我来帮你拆解下问题所在,再给你一个适配数千条句子的高效处理方案~
问题出在哪?
你当前的代码里,train_pos 是一个每个元素都是完整句子的列表(比如 ['i like apples', 'apples are my favorite fruits'])。而你写的列表推导式:
newDoc = [word for word in train_pos if len(word) >= 3]
这里的 word 其实是整个句子字符串,不是句子里的单个单词!你判断的是整个句子的长度是否≥3,而不是单个单词的长度——显然所有句子长度都远大于3,所以过滤毫无效果,输出自然和原列表一致。
高效解决方案(适配数千条句子)
要实现目标,我们需要对每个句子单独处理:拆分单词→过滤短单词→重新拼接成句子。用Python的内置方法(split()、join())+ 列表推导式就能高效完成,因为这些内置操作都是经过底层优化的,处理数千条句子完全没问题。
修改后的代码如下:
with open("./data/pos/train-pos.txt", "r", encoding="utf8") as f: # 读取并预处理每一行(去首尾空白、转小写) train_pos = [line.strip().lower() for line in f] # 批量处理每个句子:拆分单词→过滤短单词→拼接回句子 newDoc = [ ' '.join([word for word in sentence.split() if len(word) > 3]) for sentence in train_pos ] print(newDoc)
代码细节解释:
sentence.split():把单个句子拆分成单词列表(默认按空格分割,会自动忽略多余空格)[word for word in ... if len(word) > 3]:精准过滤掉长度≤3的单词' '.join(...):把过滤后的单词列表重新拼接成完整句子- 外层列表推导式批量遍历所有句子,比普通
for循环效率更高,适合处理大量数据
测试验证
用你给出的示例输入:
train_pos = ['i like apples', 'apples are my favorite fruits']
运行代码后会得到:
['like apples', 'apples favorite fruits']
完全符合你的期望结果~
内容的提问来源于stack exchange,提问作者user9370613
相关产品推荐
相关产品推荐

