以下程序代码基于spark,使用scala语言,测试时间:2018-08-03
str1和str2相似度 = 1 - Levenshtein距离 / max(length(str1), length(str2))
val df = spark.createDataset(Seq(
(1, "ab", "abc"),
(2, "bc", "abc"),
(3, "ab1", "ab2"),
(4, "kitten", "sitting"),
(5, "中国山东服务区", "山东中国服务区"),
(6, "", "abc"))).toDF("id", "s1", "s2")
df.show
+---+-------------+--------------+
| id|
s1|
s2|
+---+-------------+--------------+
|
1|
ab|
abc|
|
2|
bc|
abc|
|
3|
ab1|
ab2|
|
4|
kitten|
sitting|
|
5|中国山东服务区|
山东中国服务区|
|
6|
|
abc|
+---+-------------+--------------+
df.withColumn(
"d",
lit(1) -
levenshtein(col("s1"), col("s2")) /
greatest(length(col("s1")), length(col("s2")))).show
+---+-------------+--------------+------------------+
| id|
s1|
s2|
d|
+---+-------------+--------------+------------------+
|
1|
ab|
abc|0.6666666666666667|
|
2|
bc|
abc|0.6666666666666667|
|
3|
ab1|
ab2|0.6666666666666667|
|
4|
kitten|
sitting|0.5714285714285714|
|
5|中国山东服务区|
山东中国服务区|0.4285714285714286|
|
6|
|
abc|
0.0|
+---+-------------+--------------+------------------+
最后
以上就是暴躁金毛最近收集整理的关于Spark:基于莱文斯坦(Levenshtein)距离计算字符串相似度的全部内容,更多相关Spark内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复