我有两个字符串数组,我想将第一个数组的每个字符串与第二个数组的每个字符串进行匹配,并显示平均得分。
科特林的幼稚实施将是:
fun main(args: Array<String>) {
val jw = JaroWinklerDistance()
val a = arrayOf("FRITZ", "FRUITS")
val b = arrayOf("FRITZ", "MARTIN", "FOOBAR")
var score = 0.0
a.forEach { x ->
var current = 0.0
b.forEach { y ->
current = max(current, jw.apply(x, y))
}
score += current
}
score /= a.size
println("Average score $score")
}
它打印:
Average score 0.9288888888888889
但这不是我需要的。这个词
FRITZ
已经在两个数组中完全匹配。所以应该和剩下的相匹配
FRUITS
具有
MARTIN
和
FOOBAR
. 所以平均分应该计算为:
FRITZ - FRITZ : 1
FRUITS - MARTIN : 0.5555555555555555
FRUITS - FOOBAR : 0.4444444444444444
FRITZ = 1
FRUITS = max (0.5555555555555555, 0.4444444444444444)
= 0.5555555555555555
Average score = (1 + 0.5555555555555555) / 2
= 0.7777777777777778
这个问题类似于任何现存的问题吗?我只是在寻找算法,而不是代码。
我尝试过不同的方法,但没有运气。有人能帮忙吗?