Java Apache Jaccard文本相似度匹配初体验


前言

产品今天提了个需求,大概是这样的,来,请看大屏幕。。。额。。。搞错了,重来!来,请看需求原型
需求原型描述
需求原型清晰明了,就不做过多解释了


一、文本相似度算法的选择

文本相似度其实很好理解,按照字面意思,就是两个字符串比较,根据一定的规则来返回两个字符串的相似度。
按照需求来说的话,我需要的只是文本的匹配,对于准确性的要求可能没有那么高,所以,这里选择Apache Jaccard的算法就能满足需求

二、常见的文本相似度算法介绍

1.Levenshtein距离: Levenshtein距离算法在计算字符串相似度时需要考虑所有的插入、删除和替换操作,因此对于长字符串来说,时间复杂度较高。然而,这个算法比较准确,能够捕捉到字符串间的细微差异。(后面只会说一下调用示例,不会过重说明)

2.Jaccard相似度:Jaccard相似度算法计算集合的交集和并集的比值,是一种基本的相似度度量。它对字符串长度不敏感,计算速度相对较快。但是,它对于字符顺序不敏感,并且只考虑字符出现与否,而不考虑出现的频率。 (这里着重说明一下)

3.Cosine相似度: Cosine相似度算法将字符串视为向量,并计算它们的夹角余弦值。这个算法在计算文本相似度时,考虑了字符的频率和顺序。它也适用于处理较长的字符串,但在比较两个字符串之间的相似度时,需要先将其向量化,因此相对复杂一些。(其实Cosine相似度我也看了下源码,也度娘了一下其中的原理,由于个人数学不好,看到一大串的数学公式,感觉头都大了,就没深究^ o ^。感兴趣的同学可以自行度娘,并深入研究一下 )

三、使用示例

1、引入jar包

Levenshtein、Jaccard和Cosine都是 Apache公司的,所以引入一个就可以了

	<dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-text</artifactId>
       <version>1.10.0</version>
    </dependency>

2、方法示例

Jaccard相似度: 用于计算两个集合之间的相似度,可以将字符串视为字符的集合,计算它们的交集和并集的比值。Jaccard相似度的取值范围是01,值越接近1表示相似度越高。
Jaccard示例如下:

import org.apache.commons.text.similarity.JaccardSimilarity;
 // Jaccard文本相似度
public static void main(String[] args) {
   
    String str1 = "收到钢化膜其中一张破裂+收到钢化膜其中一张破裂要求补发一张+3191";
    String str2 = "收到后钢化膜有一张碎了角+收到后钢化膜有一张碎了角,请补发+3191";
        
    // Jaccard匹配文本相似度
    JaccardSimilarity jacc = new JaccardSimilarity();
    Double jaccardSimilarity = jacc
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值