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

使用Gensim匹配预训练Word2Vec词表时出现NameError求助

问题解决

错误原因

你的列表推导式循环顺序完全颠倒了,Python会从左到右执行列表推导式的循环,原代码里[i for i in j for j in x]先尝试遍历j,但此时j还未被定义,直接触发NameError。另外原代码会把所有嵌套的词扁平化,不符合你需要保留原嵌套结构的需求,同时没处理nan元素。

修正方案

首先将词表转为集合(提升查找效率),然后按原嵌套层级依次过滤:

import gensim
import numpy as np

# 加载预训练模型
pretrained_model = gensim.models.KeyedVectors.load_word2vec_format('Downloads/GoogleNews-vectors-negative300.bin', binary=True) 
# 转为集合,加快存在性判断
vocab_set = set(pretrained_model.key_to_index.keys())

documents = []
for group in result:
    filtered_group = []
    for item in group:
        # 跳过nan元素
        if isinstance(item, list):
            # 过滤不在词表中的词
            filtered_words = [word for word in item if word in vocab_set]
            # 仅保留非空的子列表(如果需要保留空列表可去掉此判断)
            if filtered_words:
                filtered_group.append(filtered_words)
    documents.append(filtered_group)

也可以用嵌套列表推导式简化写法:

documents = [
    [
        [word for word in sublist if word in vocab_set]
        for sublist in group
        if isinstance(sublist, list)
    ]
    for group in result
]

效果验证

运行后documents的结构将完全符合你的期望:

[[['apple'], ['banana'], ['green','grapes']], [['orange'], ['hat'], ['party','hat']], [['blue'], ['navy'], ['red','t'], ['angry']]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15