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

50few1ms  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(505)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

14天前关门了。
改进这个问题
我的数据库中有这样一个表:
I条款标题签名1第1条标题签名………第N条标题签名
有没有算法为相似的标题生成相同的“签名”。所以当我想得到所有类似的标题,我只会得到具有相同签名的文章。
类似标题示例:
“covid-19是一种新兴的、快速发展的情况。”
“covid-19是一种新兴的、不断发展的情况。”
附言:我测试了md5后,删除停止词的标题,但它是没有效率的。

bvpmtnay

bvpmtnay1#

这是一个寻找相似性的解决方案,(而不是“语义相似性”!):
假设我们有table 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 他在table上 covid 有相同的词。
如果您想将其扩展为“类似”,您可能应该:
跳过少于x个字符(即少于3个)的单词
对“情境”中的“.”做些什么。(和其他标点符号)
所以,要有“符号相似性”确实是一条很长的路。

相关问题