Python3.5中Gensim Word2Vec代码TypeError报错修复咨询
修复TypeError: slice indices must be integers or None or have an index method的问题
嘿,这个错误的根源其实很容易发现——你不小心用了Python的内置函数max来做切片的上限,但切片要求的是整数索引,而不是函数对象!
max是Python自带的用来计算最大值的内置函数,当你写model.wv.index2word[:max]时,Python会把max当成那个函数本身,而不是你想要的“最大取词数量”的整数值,这就导致了类型不匹配的错误。
具体修复步骤:
- 重命名变量,避免和内置函数冲突:定义一个自定义的整数变量,比如
max_word_count,用来指定你想要提取的词的数量,例如:max_word_count = 1000 # 改成你实际需要的数量,比如视频里的数值 - 修正切片语句:把原来的
[:max]替换成[:max_word_count]; - 确保w2v矩阵初始化正确:你需要提前创建一个维度匹配的数组来存储词向量,比如用numpy初始化(如果视频里用的是numpy的话):
import numpy as np # 根据词向量维度和要取的词数初始化 w2v = np.zeros((max_word_count, model.wv.vector_size))
修正后的完整代码示例:
import numpy as np # 假设你的Word2Vec模型已经训练并加载完成 max_word_count = 1000 # 替换成你需要的取词数量 w2v = np.zeros((max_word_count, model.wv.vector_size)) with open("metadata.tsv", "w+") as file_metadata: for i, word in enumerate(model.wv.index2word[:max_word_count]): w2v[i] = model.wv[word] file_metadata.write(word + "\n")
额外提示:
如果视频里的max是指提取所有词,那你完全可以省略切片,直接用model.wv.index2word,这样就不用定义数量变量了,代码会更简洁:
with open("metadata.tsv", "w+") as file_metadata: for i, word in enumerate(model.wv.index2word): w2v[i] = model.wv[word] file_metadata.write(word + "\n")
当然这时候w2v的初始化要改成np.zeros((len(model.wv.index2word), model.wv.vector_size))哦。
内容的提问来源于stack exchange,提问作者Eduardo Andrade
相关产品推荐
相关产品推荐

