本代码借助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((
推荐文章
发表评论