Spark:基于莱文斯坦(Levenshtein)距离计算字符串相似度

以下程序代码基于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|
+---+-------------+--------------+------------------+

你可能感兴趣的:(大数据,算法,编程语言/Scala,大数据/spark,Levenshtein,字符串相似,莱文斯坦距离,spark,scala)