0

我不知道如何解决这个问题。

我有 3 个列表,其中包含一个单词、一个标签和一个出现在文档上的数字:

v1 = [['be', 'VSIS3S0', 1], ['scott', 'NP00000', 2], ['north', 'NCMS000', 1], ['revolution', 'NP00000', 1], ['name', 'VMP00SM', 1]]
v2 = [['mechanic', 'NCMS000', 1], ['be', 'VSIS3S0', 1], ['tool', 'AQ0CS0', 1], ['sam', 'NP00000', 1], ['frida', 'NP00000', 1]]
v3 = [['be', 'VSIP3S0', 1], ['scott', 'NP00000', 1], ['who', 'NP00000', 1]]

如何构建一个接收这些列表的函数来比较每个单词,例如,单词beinv1出现在三个列表中一次,在这种情况下追加到结果列表中(1 * log(3/3)),其中 1 -> 出现的最大值(即子列表的第三个元素),对数分子 3 -> 常数,对数分母 3 -> 因为单词出现在v1,v2v3.

接下来我们有scott-> 在这种情况下附加到结果列表(2 * log(3/2))2 -> 出现的最大单词值,对数分子 3 -> 常数,对数分母 2 -> 因为单词“scott”出现在v1and上v2

接下来我们有north-> 在这种情况下附加到结果列表中(1 * log(3/1)),1 -> 出现的最大单词值,对数分子 3 -> 常数,对数分母 1 -> 因为单词“north”只出现v1

接下来我们有revolution-> 在这种情况下附加到结果列表中(1 * log(3/1)),1 -> 出现的最大单词值,对数分子 3 -> 常数,对数分母 1 -> 因为单词“north”只出现v1

接下来我们有name-> 在这种情况下附加到结果列表中(1 * log(3/1)),1 -> 出现的最大单词的值,log numerator 3 -> 常量,log denominator 1 -> 因为单词“name”只出现v1

v2此外,我们必须通过将mechanic, be,等与其他单词进行比较来做同样的事情tool,计算出现的最大值并将其相乘,w/ log(3/?)具体取决于单词是否出现在v1and中v3

这是我的尝试v1

def f1(v1, v2, v3):
    res =[]
    for e in v1:
        if e != 0:
            if e in v2 and e in v3:
                res.append(0)
            elif e in v2:
                res.append(e * math.log(3/2))
            else:
                res.append(e * math.log(3))
    return res  

返回:[0, 2.1972245773362196, 0, 0, 0, 0]

这显然不是结果

它应该返回如下内容:

[['be', 0.47], ['scott', 0.35 ], ['north', 0.47], ['revolution', 0.47], ['north', 0.47]]
4

1 回答 1

0

根据你的描述,我得到了

import math
v1 = [['be', 'VSIS3S0', 1], ['scott', 'NP00000', 2], ['north', 'NCMS000', 1], ['revolution', 'NP00000', 1], ['name', 'VMP00SM', 1]]
v2 = [['mechanic', 'NCMS000', 1], ['be', 'VSIS3S0', 1], ['tool', 'AQ0CS0', 1], ['sam', 'NP00000', 1], ['frida', 'NP00000', 1]]
v3 = [['be', 'VSIP3S0', 1], ['scott', 'NP00000', 1], ['who', 'NP00000', 1]]

v = [v1,v2,v3]

countdict = {}
for vi in v:
    for e in vi:
        countdict[e[0]] = countdict.get(e[0],0) + 1

scoredict = {}
for vi in v:
    for e in vi:
        scoredict[e[0]] = scoredict.get(e[0],0) + (e[2] * math.log10(3.0/countdict[e[0]]))

print scoredict

我将输出保存为字典,即:

{'be': 0.0, 'revolution': 0.47712125471966244, 'north': 0.47712125471966244, 'name': 0.47712125471966244, 'sam': 0.47712125471966244, 'tool': 0.47712125471966244, 'who': 0.47712125471966244, 'scott': 0.5282737771670437, 'mechanic': 0.47712125471966244, 'frida': 0.47712125471966244}
于 2013-08-29T07:30:50.463 回答