本代码借助chatgpt一点点调试出来的。 最近做的项目需要计算商品名称的相似度,计算字符串类型值的相似度,要分四个步骤: 字符串->中文分词->词向量化->相似度计算

以下是代码模块:

import org.apache.spark.sql.SparkSession

import org.ansj.splitWord.analysis.ToAnalysis

import org.apache.spark.ml.feature.Word2Vec

import org.apache.spark.ml.linalg.{

Vector, Vectors}

object fenci2 {

def main(args: Array[String]): Unit = {

import org.apache.spark.sql.functions._

val spark = SparkSession

.builder()

.appName("fenci").config("spark.master", "local")

.getOrCreate()

val data = spark.createDataFrame(Seq(

(1, "这是一段中文文本,需要进行分词。"))

).toDF("id", "text")

// 定义中文分词函数

val segFunc = udf((sentence: String) => ToAnalysis.parse(sentence).toStringWithOutNature(" ").split(" "))

//toStringWithOutNature(" "))

// 对DataFrame中的文本数据进行中文分词

val segmented = data.withColumn("words", segFunc(col("text")))

println(segmented.schema("words").dataType)

segmented.show()

// 创建Word2Vec模型并训练

val word2Vec = new Word2Vec()

.setInputCol("words")

.setOutputCol("vectors")

.setVectorSize(100)

.setWindowSize(5)

.setMinCount(1)

val model = word2Vec.fit(segmented)

// 转换文本数据为Word2Vec向量表示

val w2vData = model.transform(segmented)

// 显示每个文本对应的词向量

w2vData.select("text", "vectors").show(false)

val w2vData_n = w2vData.withColumn("vectors2",w2vData.col("vectors"))

println("sss")

w2vData_n.show()

//println(w2vData.schema("vectors").dataType)

// 计算余弦相似度

val cosSim = udf((

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: