当我把一个字符串列表传递给这个函数时,我希望它返回一个矩阵,指出每个唯一的单词在字符串中出现的次数,但是,我得到一个矩阵,第一个字符串的值重复了4次。 这是密码
def tf(corp):
words_set = set()
for i in corp:
a=i.split(' ')
for j in a:
words_set.add(j)
words_dict = {i:0 for i in words_set}
wcount=0
matr=list()
for doc in corp:
for worduni in words_dict:
count=0
for words in doc.split(' '):
if words==worduni:
count+=1
words_dict[worduni]=count/len(doc.split(' '))
print(words_dict)
matr.append(words_dict)
return matr
当我打印matr的值时,我得到
[{'the':0.2,
“第一”:0.2,
“文档”:0.2,
“第三”:0.0,
“是”:0.2,
“一”:0.0,
“和”:0.0,
“this”:0.2,
“秒”:0.0},
{'the':0.2,
“第一”:0.2,
“文档”:0.2,
“第三”:0.0,
“是”:0.2,
“一”:0.0,
“和”:0.0,
“this”:0.2,
“秒”:0.0},
{'the':0.2,
“第一”:0.2,
“文档”:0.2,
“第三”:0.0,
“是”:0.2,
“一”:0.0,
“和”:0.0,
“this”:0.2,
“秒”:0.0},
{'the':0.2,
“第一”:0.2,
“文档”:0.2,
“第三”:0.0,
“是”:0.2,
“一”:0.0,
“和”:0.0,
“this”:0.2,
“秒”:0.0}]
我对此进行了修改,以获得与打印内容相同的非重复数据:
您的代码所做的是重复地将相同的对象(
word_dict
)添加到matr
。当然,因为matr
是一个列表,它可以处理这个。。。你将有多个引用同一本词典。同时,您正在更新词典。所以你在打印列表时看到的是字典的最终状态。。。N次。你知道吗现在我怀疑您打算在
matr
中保存word_dict
状态的快照。但是如果你想这样做,你需要在matr
中保存word_dict
的拷贝另一方面,如果您打算为
corp
中的每个doc
生成一个单独的词频字典,那么您需要在外循环中移动word_dict
的创建和初始化。你知道吗另外,你计算单词数量和频率的方法似乎完全错误。我想这就是你在这里想做的。你知道吗
注意:如果您使用更有意义的方法和变量名和/或向代码中添加适当的注释,其他人将更容易理解您的代码的意图。你知道吗
相关问题 更多 >
编程相关推荐