微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何为相似文本语义相似性生成相同的哈希?

如何解决如何为相似文本语义相似性生成相同的哈希?

我的数据库中有一个这样的表:

id 文章标题 签名
1 第 1 条的标题 signatureX
.. ... ...
n 文章标题 n signatureY

是否有任何算法可以为相似的标题生成相同的“签名”。所以当我想得到所有相似的标题时,我只会得到具有相同签名的文章

类似标题的例子:

“COVID-19 是一种新兴的、快速发展的情况。”

“COVID-19 是一种新兴的、不断变化的情况。”

ps:我在去掉标题中的停用词后测试了 MD5,但效率不高。

解决方法

这是寻找相似性的解决方案,(不是“语义相似性”!):

假设我们有这样的表 covid

CREATE TABLE `covid` (
  `c` varchar(500) DEFAULT NULL,`id` int DEFAULT NULL
)

INSERT INTO `covid` VALUES 
   ('COVID-19 is an emerging,rapidly evolving situation.',1),('COVID-19 is an emerging,evolving situation.',2);

这样做时:

WITH RECURSIVE cte AS (
     SELECT 
        1 as i
     UNION ALL
     SELECT 
        i+1 
     FROM cte 
     WHERE i<10)
SELECT w,count(*),GROUP_CONCAT(id)  line
FROM (
   SELECT 
      id,split(x.c,',i) as w
   FROM 
      (select id,replace(c,' ',') as c from covid) x,cte) w1
WHERE NOT w is NULL and w<>''
GROUP BY w
ORDER BY 2 DESC;
        

你应该得到这样的结果:

+------------+----------+------+
| w          | count(*) | line |
+------------+----------+------+
| an         |        2 | 1,2  |
| COVID-19   |        2 | 1,2  |
| emerging   |        2 | 1,2  |
| evolving   |        2 | 2,1  |
| is         |        2 | 1,2  |
| situation. |        2 | 2,1  |
| rapidly    |        1 | 1    |
+------------+----------+------+

根据 count,您现在知道表 line 中哪些 covid 具有相同的词。

如果您想将其扩展为“类似”,您可能应该:

  • 跳过少于 x 个字符(即少于 3 个)的单词
  • 对“.”做点什么在'情况'。 (和其他标点符号)

因此,要实现“符号相似性”确实是很长的路要走。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。