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

如何提取指定文件中的前N个唯一单词?已掌握逐行读取方法

提取文件中前N个唯一单词的实现方案

嘿,既然你已经搞定了文件读写的部分,那咱们直接聚焦核心问题——按顺序提取首次出现的唯一单词并取前N个对吧?我给你捋清楚思路,再附上可直接用的代码:

核心思路

要实现这个需求,关键是按单词首次出现的顺序保留唯一性——不能用普通的集合(会打乱顺序),所以我们需要结合:

  • 一个列表unique_words:按顺序存储首次出现的单词
  • 一个集合seen_words:快速判断单词是否已经出现过(比在列表里查找效率高得多)

步骤大概是:

  1. 逐行读取文件内容
  2. 把每行拆分成单个单词(自动处理多余空格)
  3. 遍历每个单词,若未在seen_words中出现过,就添加到两个容器中
  4. 一旦unique_words的长度达到N,立即返回结果,不用继续处理剩余内容
  5. 如果文件中唯一单词总数不足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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:49:25