我想比较两个不同列表中的单词,例如,我有:
['freeze','dog','difficult','answer']和另一个列表['freaze','dot',' dificult','anser']。我想比较此列表中的单词并给不正确的字母打上标记。因此,+ 1表示正确,-1表示错误。为了提供一些背景信息,在拼写测试中,第一个列表是答案,第二个列表是学生的答案。我将如何去做?
假设两个列表的长度相同,并且grade(a,b)
在a,b
字符串中有一些函数:
key = ['freeze','dog','difficult','answer']
ans = ['freaze','dot','dificult','anser']
pairs = zip(key, ans)
score = sum(grade(k,v) for (k,v) in pairs)
可能的评分功能为:
def grade(a,b):
return 1 if a == b else -1
惩罚每个错误字符并给出1pt正确拼写(听起来很刺耳...)的评分功能可能是:
def grade(a,b):
score = sum(a == b for (a,b) in zip(a,b)) - max(len(a), len(b))
return score if score else 1
如果您需要Levenshtein距离,则可能希望您的grade
函数成为以下内容的包装,该内容在Wikibooks上发现并且似乎相当有效:
def levenshtein(seq1, seq2):
oneago = None
thisrow = range(1, len(seq2) + 1) + [0]
for x in xrange(len(seq1)):
twoago, oneago, thisrow = oneago, thisrow, [0] * len(seq2) + [x + 1]
for y in xrange(len(seq2)):
delcost = oneago[y] + 1
addcost = thisrow[y - 1] + 1
subcost = oneago[y - 1] + (seq1[x] != seq2[y])
thisrow[y] = min(delcost, addcost, subcost)
return thisrow[len(seq2) - 1]
您也可以看一下difflib
做更复杂的事情。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句