如何提取指定文件中的前N个唯一单词?已掌握逐行读取方法
提取文件中前N个唯一单词的实现方案
嘿,既然你已经搞定了文件读写的部分,那咱们直接聚焦核心问题——按顺序提取首次出现的唯一单词并取前N个对吧?我给你捋清楚思路,再附上可直接用的代码:
核心思路
要实现这个需求,关键是按单词首次出现的顺序保留唯一性——不能用普通的集合(会打乱顺序),所以我们需要结合:
- 一个列表
unique_words:按顺序存储首次出现的单词 - 一个集合
seen_words:快速判断单词是否已经出现过(比在列表里查找效率高得多)
步骤大概是:
- 逐行读取文件内容
- 把每行拆分成单个单词(自动处理多余空格)
- 遍历每个单词,若未在
seen_words中出现过,就添加到两个容器中 - 一旦
unique_words的长度达到N,立即返回结果,不用继续处理剩余内容 - 如果文件中唯一单词总数不足N,就返回所有找到的唯一单词
代码实现(Python)
def get_top_n_unique_words(filename, n): seen_words = set() unique_words = [] with open(filename, 'r') as file: for line in file: # 拆分单词:strip()去掉首尾空白,split()按任意空白分割(自动处理多空格/换行) words = line.strip().split() for word in words: if word not in seen_words: seen_words.add(word) unique_words.append(word) # 达到指定数量就提前结束,提升效率 if len(unique_words) == n: return ' '.join(unique_words) # 若唯一单词总数不足N,返回所有已找到的 return ' '.join(unique_words) # 测试你的示例场景 # input.txt内容:I like pancakes in my breakfast. Also, I like pancakes in my dinner. print(get_top_n_unique_words('input.txt', 13)) # 输出结果:I like pancakes in my breakfast. Also, dinner.
可选扩展:处理标点与大小写
如果你的需求里,希望把breakfast.和breakfast视为同一个单词,或者忽略大小写(比如I和i算同一个),可以添加一个单词清洗的步骤:
import string def clean_word(word): # 去掉单词首尾的标点,转成小写(按需选择) cleaned = word.strip(string.punctuation) return cleaned.lower() # 如果不需要忽略大小写,去掉.lower()即可 # 修改后的判断逻辑: cleaned_word = clean_word(word) if cleaned_word not in seen_words: seen_words.add(cleaned_word) unique_words.append(word) # 这里可以选择存清洗后的还是原单词
内容的提问来源于stack exchange,提问作者Renato
相关产品推荐
相关产品推荐

