不多说直接上代码:

package cn.nonononononoimport scala.collection.mutable
import scala.collection.mutable.ListBuffer/*** @作者:Alpha.SK.LXY* @时间:2022/6/2 14:09* @描述:文本处理工具集*/
object StrDealTool {/*** 向量的模长** @param vec*/def module(vec: Vector[Double]): Double = {// math.sqrt( vec.map(x=>x*x).sum )math.sqrt(vec.map(math.pow(_, 2)).sum)}/*** 求两个向量的内积** @param v1* @param v2*/def innerProduct(v1: Vector[Double], v2: Vector[Double]): Double = {val listBuffer = ListBuffer[Double]()for (i <- 0 until v1.length; j <- 0 until v2.length; if i == j) {if (i == j) {listBuffer.append(v1(i) * v2(j))}}listBuffer.sum}/*** 求两个向量的余弦值** @param v1* @param v2*/def cosvec(v1: Vector[Double], v2: Vector[Double]): Double = {val cos = innerProduct(v1, v2) / (module(v1) * module(v2))if (cos <= 1) cos else 1.0}def textCosine(str1: String, str2: String): Double = {val set = mutable.Set[Char]() //统计两句话所有的字str1.foreach(set += _)str2.foreach(set += _)println(set)val ints1: Vector[Double] = set.toList.sorted.map(ch => {str1.count(s => s == ch).toDouble}).toVectorprintln("===ints1: " + ints1)val ints2: Vector[Double] = set.toList.sorted.map(ch => {str2.count(s => s == ch).toDouble}).toVectorprintln("===ints2: " + ints2)cosvec(ints1, ints2)}//  测试def main(args: Array[String]): Unit = {val str1 = "跟我读黑化肥发灰会挥发"val str2 = "跟我读黑化肥发灰会挥发"val result = textCosine(str1, str2)println("两句话的余弦距离: " + result)val str11 = "跟我读黑化肥发灰会挥发"val str22 = "发挥会灰发肥化黑读我跟"val result2 = textCosine(str11, str22)println("两句话的余弦距离(倒序): " + result2)val str111 = "跟我读黑化肥发灰会挥发"val str222 = "如果黑化肥发灰发会不会挥发"val result222 = textCosine(str111, str222)println("两句话的余弦距离(文本不一致): " + result222)}
}

结果:

Nice!

有问题评论交流或者关注小程序《数据之巅》

余弦相似度-字符串相似度计算(scala)相关推荐

  1. ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli

    ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...

  2. ML之相似度计算:图像数据、字符串数据等计算相似度常用的十种方法简介、代码实现

    ML之相似度计算:图像数据.字符串数据等计算相似度常用的十种方法简介.代码实现 目录 相似度 1.余弦相似性-夹角余弦(Cosine_Distance)距离 2.代码实现-余弦距离.余弦相似度 2.皮 ...

  3. 字符串相似度计算工具和算法

    一.fuzzywuzzy 介绍:JavaWuzzy是Java版的FuzzyWuzzy,用于计算字符串之间的匹配度. FuzzySearch.ratio(String s1, String s2) 全匹 ...

  4. python-levenshtein —— 字符串相似度的计算

    1. 字符串相似度 hamming(str1, str2) 汉明距离:两个等长字符串对应位置上不同字符的个数: distance(str1, str2) 编辑距离:描述一个字符串转成另一个字符串最少的 ...

  5. similartext php,使用PHPsimilartext计算两个字符串相似度,similartext_PHP教程

    使用PHP similar text计算两个字符串相似度,similartext 在网站开发中,我们经常使用php similar text 计算两个字符串相似度; 1,similar_text的用法 ...

  6. 文本相似度php,分析php计算文本字符串相似度函数similar_text()的原理

    PHP有个计算两个文本字符串相似度的函数similar_text(),可以得出一个百分比来表示两个字符串的相似程度.效果如下: similar_text('aaaa', 'aaaa', $percen ...

  7. python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

  8. python字符串相似度去重_Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

  9. python字符串相似度去重_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

最新文章

  1. spring boot socket长连接_springboot 整合阿里 druid 数据库连接池实战
  2. 城市大脑全球标准研究2:如何理解和定义城市大脑?
  3. 谷歌微软高通反对英伟达收购ARM 值得国人深思
  4. 读《.NET本质论》样章有感
  5. docker machine介绍和使用
  6. MySQL和InnoDB体系结构,内存数据对象,基本建表操作
  7. day16-面向对象编程进阶
  8. QT/QML Text 部分功能(自动省略 自动换行 自动调节字体大小 调节行间距
  9. STS代码式预付费用电管理系统
  10. BootStrap日历插件
  11. 英语学渣如何看懂全英文的芯片数据手册
  12. var模型eviews操作步骤
  13. win11iso镜像如何安装 Windows11官网镜像安装步骤
  14. 外星人 Alienware x15 R2 评测
  15. 【IEEE754制32位浮点数】与十进制相互转换
  16. linux之文件搜索和文件内容搜索
  17. throttle在程序中的作用
  18. 修改IDEA默认配置路径
  19. 更改安卓系统开机画面
  20. 排序算法的稳定性及其汇总

热门文章

  1. 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f608' in position。。。
  2. 什么是构造函数?构造函数有什么用?
  3. 测试狗:热重分析曲线怎么看?热重分析原理和特点解析
  4. 【转帖】【转帖】武侠界潜水多年所见的最强原创,不转一下对不起大家!!!
  5. 使用Jenkins Pipeline插件和Docker打造容器化构建环境
  6. 茶余饭后-五子棋棋盘究竟够大么?
  7. 微信小程序之----语音录制功能
  8. 使用Adobe软件镜像pdf页面
  9. 临港新片区专精特新中小企业认定政策解读
  10. 微积分的需求和基本定理