余弦相似度-字符串相似度计算(scala)
不多说直接上代码:
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)相关推荐
- ML:图像数据、字符串数据等计算相似度常用的十种方法(余弦相似性、皮尔逊、闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离、马氏距离、汉明距离、编辑距离、杰卡德相似系数、相对熵/KL散度、Helli
ML:图像数据.字符串数据等计算相似度常用的十种方法(余弦相似性.皮尔逊.闵可夫斯基距离/曼哈顿距离/欧氏距离/切比雪夫距离.马氏距离.汉明距离.编辑距离.杰卡德相似系数.相对熵/KL散度.Helli ...
- ML之相似度计算:图像数据、字符串数据等计算相似度常用的十种方法简介、代码实现
ML之相似度计算:图像数据.字符串数据等计算相似度常用的十种方法简介.代码实现 目录 相似度 1.余弦相似性-夹角余弦(Cosine_Distance)距离 2.代码实现-余弦距离.余弦相似度 2.皮 ...
- 字符串相似度计算工具和算法
一.fuzzywuzzy 介绍:JavaWuzzy是Java版的FuzzyWuzzy,用于计算字符串之间的匹配度. FuzzySearch.ratio(String s1, String s2) 全匹 ...
- python-levenshtein —— 字符串相似度的计算
1. 字符串相似度 hamming(str1, str2) 汉明距离:两个等长字符串对应位置上不同字符的个数: distance(str1, str2) 编辑距离:描述一个字符串转成另一个字符串最少的 ...
- similartext php,使用PHPsimilartext计算两个字符串相似度,similartext_PHP教程
使用PHP similar text计算两个字符串相似度,similartext 在网站开发中,我们经常使用php similar text 计算两个字符串相似度; 1,similar_text的用法 ...
- 文本相似度php,分析php计算文本字符串相似度函数similar_text()的原理
PHP有个计算两个文本字符串相似度的函数similar_text(),可以得出一个百分比来表示两个字符串的相似程度.效果如下: similar_text('aaaa', 'aaaa', $percen ...
- python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法
字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...
- python字符串相似度去重_Python 字符串相似性的几种度量方法
字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...
- python字符串相似度去重_详解Python 字符串相似性的几种度量方法
字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...
最新文章
- spring boot socket长连接_springboot 整合阿里 druid 数据库连接池实战
- 城市大脑全球标准研究2:如何理解和定义城市大脑?
- 谷歌微软高通反对英伟达收购ARM 值得国人深思
- 读《.NET本质论》样章有感
- docker machine介绍和使用
- MySQL和InnoDB体系结构,内存数据对象,基本建表操作
- day16-面向对象编程进阶
- QT/QML Text 部分功能(自动省略 自动换行 自动调节字体大小 调节行间距
- STS代码式预付费用电管理系统
- BootStrap日历插件
- 英语学渣如何看懂全英文的芯片数据手册
- var模型eviews操作步骤
- win11iso镜像如何安装 Windows11官网镜像安装步骤
- 外星人 Alienware x15 R2 评测
- 【IEEE754制32位浮点数】与十进制相互转换
- linux之文件搜索和文件内容搜索
- throttle在程序中的作用
- 修改IDEA默认配置路径
- 更改安卓系统开机画面
- 排序算法的稳定性及其汇总
热门文章
- 解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\U0001f608' in position。。。
- 什么是构造函数?构造函数有什么用?
- 测试狗:热重分析曲线怎么看?热重分析原理和特点解析
- 【转帖】【转帖】武侠界潜水多年所见的最强原创,不转一下对不起大家!!!
- 使用Jenkins Pipeline插件和Docker打造容器化构建环境
- 茶余饭后-五子棋棋盘究竟够大么?
- 微信小程序之----语音录制功能
- 使用Adobe软件镜像pdf页面
- 临港新片区专精特新中小企业认定政策解读
- 微积分的需求和基本定理