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

如何从NLTK Reuters语料库提取指定长度随机文档并优化异常代码

原代码无法停止的原因

  1. 缺失random库导入语句,运行首先会抛出未定义变量的错误
  2. 终止逻辑完全错误:你写的while len(sample_data) == 10: break仅在样本数刚好等于10时执行break,且只能跳出内层while循环,外层for循环还会继续遍历所有句子,不会提前终止
  3. 效率极低:每次循环都会重新调用reuters.sents()加载全量语料,冗余开销极大

高效实现方案

方案1:先筛选后抽样(逻辑最简洁,无死循环风险)

先一次性筛选出所有符合长度要求的句子,再直接随机抽取10份,代码如下:

import nltk
import random
from nltk.corpus import reuters

# 筛选所有元素数量超过50的句子
valid_sents = [sent for sent in reuters.sents() if len(sent) > 50]
# 随机抽取10个不重复的样本
sample_data = random.sample(valid_sents, 10)

方案2:随机抽取+提前终止(适合超大语料不想全量预筛选的场景)

提前加载一次全量句子列表,循环随机抽取直到凑够10个符合要求的样本就自动停止:

import nltk
import random
from nltk.corpus import reuters

sample_data = []
# 提前加载一次所有句子,避免循环内反复加载
all_sents = list(reuters.sents())
target_count = 10

while len(sample_data) < target_count:
    picked_sent = random.choice(all_sents)
    if len(picked_sent) > 50:
        sample_data.append(picked_sent)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:06