matlab对相似度进行排序,怎么做关键字按照匹配度相似度排序?

在我们日常开发过程中有时遇到需要对标题内容进行关键字检索匹配排序,一般我们常用"like"直接做了模糊查询,但是这种模糊查询没有做到关键词匹配度查询。下面我整理两种我在开发中用到两种取巧的做法:

做法一:

利用数据库like关键词进行第一步匹配出包含关键词的数据,然后利用关键词在所在语句长度和关键词长度做对比,得到比重越大的说明关键字在语句中越重要,这里没有考虑一句话里面包含关键词多次的情况,select id,字段,(length(字段)-length('关键字')) as rn from 表名 where 字段 like '%关键字%' order by rn

执行语句:select id,content,(length(content)-length('11')) as rn from msg_sms_history

where content like '%11%' order by rn

2b43947dd0d2d8bf2adcb94ef667724e.png

然而数据还是排序没靠前:ID为39的数据排在ID为307的数据前面了,我们可以增加一个排序:select id,content,(length(content)-length('11')) as rn from msg_sms_history

where content like '%11%' order by rn,content;

这样就可以输出我们想要的结果了。

优点:简单粗暴,直接套语句就能用

缺点:此结果不够准确,如果关键词只用了一般不能够匹配出来,如"我们都是好学生" 关键字是"我们是"  这样就匹配不到,其次在数据量大的情况下查询效率有一定影响

做法二:

增加一个关键词表记录标题包含的关键词:每次增加文章我们用分词组件把文章标题记录到关键词表和文章关联。然后查询的时候按关键词匹配多少来排序.

651788ef755c100044acea855daac0fc.png

848f421d908867ef86784c5ed0a39ad2.png

对上述语句进行分词后,然后查询“我们是乒乓球队队员”进行分词处理得到 keyword="我们" or keyword="我们是"  or keyword="乒乓球"or keyword="队员"。

然后去数据库中查询

select id from table2 where keyword="我们" or keyword="我们是"  or keyword="乒乓球"or keyword="队员"group by id order by count(*) desc;

这样,相似程度较多的id为1的排在第一,id为2的排在第二,

优点:比做法一准确一些,能做到部分联想搜索

缺点:此结果不够准确,关键词表会很大匹配,对于分词过大时查询较慢

以上两种方法比较简单供大家参考使用,实际中大项目会用到全文检索如Elasticsearch、Lucene,检索的结果更加准确。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值