使用scala计算语义相似度得分

时间:2021-02-24 23:09:36

标签: scala apache-spark similarity

我有两个文件,其中包含 id 和流派。流派列包含一些短语和句子。我需要计算流派和与流派相关的单词之间的相似度。

第一个文件示例:

enter image description here

相关类型示例:

enter image description here

代码:

      val lines=Source.fromURL(Source.getClass().getResource("file:///usr/local/spark/dataset/algorithm3/result/part-r-00000-85c84730-ce6b-4b0f-8278-dcafa33f5818.csv")).mkString("\n")
 val lines2=Source.fromURL(Source.getClass().getResource("file:///usr/local/spark/dataset/algorithm3/funny/part-r-00000-3460ee84-a498-4e25-a55c-3aba962febe2.csv")).mkString("\n")

   import java.nio.file.Files
import java.nio.file.Paths
def cosineSimilarity(x: Array[Double], y: Array[Double]): Double = {
    require(x.size == y.size)
    dotProduct(x, y)/(magnitude(x)*magnitude(y))
}

def dotProduct(x: Array[Double], y: Array[Double]): Double = {
    (for((a, b)<-x zip y) yield a*b).sum
}

def magnitude(x: Array[Double]): Double = {
    math.sqrt(x.map(i => i*i).sum)
}

如何衡量相似度得分?

0 个答案:

没有答案