从单词列表中获取基于给定单词的单词推荐

2024-04-26 21:31:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组matrixValue,和3个包含以下内容的列表:

矩阵值:(type:ndarray)单词列表中单词的降序出现次数

[.. 62 62 ..]
[.. 23 21 ..]
[.. 14 13 ..]

值列表:(type:list)单词列表中某个单词出现的次数,按降序排列

[... 74, 71, 63, 62, 62, 50, 40, 23, 21, 14, 13, 11, 11...]

userGivenWord:(type:list)用户指定的单词

[... water, animal, flower...]

单词列表:(type:list)包含英语词典单词列表

[.. water, ocean, lake, green, blue, sea...]

给定一个用户定义的单词,我将从单词列表中检索一些“语义相似”的单词。我的问题是,对于valueList中的任何重复出现(例如62、11),只打印第一个英文单词“lake”,而不打印sea(假设blue和lake都出现62次)。你知道吗

输出

water = lake, lake # wrong output
water = lake, sea # correct output

下面是我非常确定的导致问题的代码部分:

for i in range(0, 3): # printing top 3 words
    value = matrixValue[i] # returns the first two numbers, 62 & 62
    iValue = valueList.index(value) # returns the indexes in valueList for the above value 
    tagword = str(tag_list[iValue]) # retrieves the word based on the iValue
    res = userTags[x] + " = " + tagword

同样,湖和海都发生了62次。我相信错误发生在for循环的第二行。当我在调试器中查看时,我注意到“lake”一词被两次添加到结果列表中(而不是sea)。我不确定我在这里是否连贯,或者我是否清楚地写了这个问题。。。但如果需要澄清,请随时问我问题。你知道吗


Tags: the列表forvaluetype单词次数list
1条回答
网友
1楼 · 发布于 2024-04-26 21:31:24

如果您想得到出现次数相同的单词,那么计数器dict会简单得多:

from collections import Counter

c = Counter(["foo","foo","bar","bar","foobar","foob"])
print([k for k, v in c.items() if v == 2 ])
['foo', 'bar']

然而,你计算相似度,如果它不是频率简单地存储在你的dict和访问关键字共同的话。索引除了比使用dict效率低得多之外,总是会返回第一次出现的内容。你知道吗

要将count存储为关键字并将单词分组为值,请执行以下操作:

from collections import defaultdict

d = defaultdict(list)

for k,v in c.items():
    d[v].append(k)
print(d.get(2,"N/A"))
['foo', 'bar']

相关问题 更多 >