mysql大文本中文相似度

发布时间: 2023-11-21 12:49 阅读: 文章来源:1MUMB4219PS

很多用过ElasticSearch的人都知道,es检索的效率相对较好,可以在海量的数据中实现秒级检索,并给出相关的评分。很多小伙伴可能会有疑问,底层实现使用的mysql、tidb、oceanbase等数据库嘛?答案是否定,这些数据库或许可以完成检索,但很难实现评分计算。也有小伙伴疑惑,评分是什么?简单来说,评分是指查询的内容与检索到的文档的相似度

下面让我们 一起来了解一下评分是如何计算的?本文我们先探索一下最简单的相似度计算:余弦相似度算法

余弦相似度

余弦相似度计算的步骤主要有以下几步:

假设查询语句为q,待匹配的文档为d

对q和d进行分词。处理词条。比如:大小写转换,去除一些“无意义”的词,如:标点符号等词条向量化。取q和d的分词集合并集,作为基础坐标,分别表示向量和向量计算权重。最简单的方式是将词频(分词在分词集合中出现的次数)作为权重根据余弦公式计算余弦值。

余弦函数的取值范围为:[-1,1]。行文本相似度度量时,使用正区间[0,1],0表示“完全不同”,1表示“完全相同”。

举例

文本1: 我今天去打网球,然后去打橄榄球。

文本2: 我明天去吃火锅,然后去打篮球。

语句分词:文本1: 我 今天 去 打 网球 , 然后 去 打 橄榄球 。文本2:我 明天 去 吃 火锅 , 然后 去 打 篮球 。处理词条。去除“无意义”词,比如:标点符号文本1: 我 今天 去 打 网球 然后 去 打 橄榄球文本2:我 明天 去 吃 火锅 然后 去 打 篮球词条向量化使用文本1和文本2的分词集合并集作为分词集合,集合为:我 今天 明天 去 吃 打 然后 网球 橄榄球 篮球 火锅向量化,如果文本中有某个词在分词集合中,则对应位置标记为1

分词集合

今天

明天

然后

网球

橄榄球

篮球

火锅

文本1

1

1

1

1

1

1

1

文本2

1

1

1

1

1

1

1

1

计算权重,此处以分词在文本中出现的次数作为分词的权重,加入权重的向量

分词集合

今天

明天

然后

网球

橄榄球

篮球

火锅

文本1

1

1

2

2

1

1

1

文本2

1

1

2

1

1

1

1

1

计算余弦值

计算结果约为:0.727

•••展开全文