为何`Defaults.stop_words`与`nlp.vocab`的停用词数量不匹配?
spaCy中
Defaults.stop_words与vocab停用词数量差异的原因 这两个数值差异的核心原因是两者的统计范围完全不同:
nlp.Defaults.stop_words是spaCy预定义的完整英文停用词集合,包含所有官方标记为停用词的词汇(共326个),这个集合不依赖于当前加载的词汇表大小。nlp.vocab是当前模型(这里是en_core_web_sm)实际加载的词汇条目集合。en_core_web_sm是轻量模型,它的词汇表只保留了训练数据中高频出现的词汇,很多低频的停用词并没有被预加载到vocab里。当你遍历nlp.vocab时,只会统计那些已经被加载的、且标记为停用词的词汇,所以数量只有111个。
验证示例
可以通过以下代码确认这个逻辑:
import spacy nlp = spacy.load('en_core_web_sm') # 检查一个低频停用词 low_freq_stop_word = "whereafter" # 该词属于预定义停用词集合 print(low_freq_stop_word in nlp.Defaults.stop_words) # 输出: True # 但该词不在预加载的vocab条目里 print(low_freq_stop_word in [token.text for token in nlp.vocab]) # 输出: False # 主动访问该词时,spaCy会动态创建词汇条目并标记为停用词 print(nlp.vocab[low_freq_stop_word].is_stop) # 输出: True
内容的提问来源于stack exchange,提问作者qk11
相关产品推荐
相关产品推荐

