两个单词列表之间的比较

时间:2019-10-12 04:03:54

标签: python nlp

我想比较两个列表(结果,真实情况)。如果两者都匹配,则输出应包含1;​​如果不匹配,则输出应包含1,并且输出正敏感信号。例如:

 result= [1,2,3,4,5]
 ground-truth=[2,4]
 Output= [0,1,0,1,0]

我为此实现了python代码:

def comparedkeground(dke,grd):
    correct=np.zeros(len(dke))
    try:
        for i in range(len(grd)):
            a=dke.index(grd[i])
            correct[a]=1
    except:
        'ValueError'
    return correct

在某些情况下,此代码可提供理想的结果:例如:

d=[1,2,30,4,6, 8, 50, 90, 121]
e=[30, 2, 50, 90]
print(comparedkeground(d,e))
[0. 1. 1. 0. 0. 0. 1. 1. 0.]

cc=['word', 'flags', 'tv', 'nanjo', 'panjo']
ccc=['panjo', 'tv']
print(comparedkeground(cc,ccc))
[0. 0. 1. 0. 1.]

但是相同的代码不起作用:

u=['Lyme-disease vaccine', 'United States', 'Lyme disease', 'Allen Steere']
u1= ['drugs', 'Lyme-disease vaccine', 'Lyme disease']
print(comparedkeground(u,u1))
[0. 0. 0. 0.]

3 个答案:

答案 0 :(得分:2)

这是因为u数组没有'drugs'值,并且dke.index(grd[i])的输出将是错误的!您将try语句放置在错误的位置,您必须像这样更改它:

def comparedkeground(dke,grd):
    correct=np.zeros(len(dke))
    for i in range(len(grd)):
        try:
            a=dke.index(grd[i])
            correct[a]=1
        except:
            'ValueError'
    return correct

答案 1 :(得分:1)

如果您正在运行python3,请尝试:

def comparedkeground(dke, grd):
    return [int(i in grd) for i in dke]

答案 2 :(得分:0)

这是因为当主列表中不存在该元素时,循环中就会发生错误,该错误会停止执行当前的for循环,但尚未检查数组的其余部分, 因此,您可以像这样将try catch块向内移动一点

import numpy as np
def comparedkeground(dke,grd):
    correct=np.zeros(len(dke))
    for i in range(len(grd)):
        try:
            a=dke.index(grd[i])
            correct[a]=1
        except:
            'ValueError'
    return correct

u=['Lyme-disease vaccine', 'United States', 'Lyme disease', 'Allen Steere']
u1= ['drugs', 'Lyme-disease vaccine', 'Lyme disease']
print(comparedkeground(u,u1))

输出

[ 1.  0.  1.  0.]

我将try块移入​​了内部,因为如果找不到当前元素,则应该在列表中搜索下一个元素,因此应该为下一次迭代提供循环,因此应该在其中处理任何错误。迭代本身。