Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SQL-两个长度不同的字符串之间的相似性_Asp.net_Sql Server_Algorithm_Clr_Similarity - Fatal编程技术网

Asp.net SQL-两个长度不同的字符串之间的相似性

Asp.net SQL-两个长度不同的字符串之间的相似性,asp.net,sql-server,algorithm,clr,similarity,Asp.net,Sql Server,Algorithm,Clr,Similarity,我有一个SQL Server产品表,每个产品都有一个在我们网站上公开的描述。我想防止,或者至少警告我们的用户,当一个描述与另一个产品的描述太相似时。每个产品的描述长度可能会有很大差异 我想查询描述中包含重复/相似段落/文本块的产品。i、 e.字符串A有一系列独特的内容,但与字符串B共享一个相似/相同的段落。但是,我不确定哪种相似性算法最适合使用: 和算法似乎只适用于短字符串 我不确定这个模型是否能很好地考虑到巨大的差异。i、 它似乎忽略了两个字符之间的潜在空间,寻找任何相似的组合序列 听起来

我有一个SQL Server产品表,每个产品都有一个在我们网站上公开的描述。我想防止,或者至少警告我们的用户,当一个描述与另一个产品的描述太相似时。每个产品的描述长度可能会有很大差异

我想查询描述中包含重复/相似段落/文本块的产品。i、 e.字符串A有一系列独特的内容,但与字符串B共享一个相似/相同的段落。但是,我不确定哪种相似性算法最适合使用:

  • 和算法似乎只适用于短字符串

  • 我不确定这个模型是否能很好地考虑到巨大的差异。i、 它似乎忽略了两个字符之间的潜在空间,寻找任何相似的组合序列

听起来像是我在寻找的,但我不仅仅是在寻找重复的内容和细微的差异。我也在寻找重复的内容,在一个独特的文本块中注入细微的差异。我不知道如何在SQL中实现模糊哈希。并且似乎使用模糊散列,但对于我的用例来说非常不精确

理想情况下,相似度SQL函数应该很快,但我可以将缓存的相似度值存储在另一个表中,并安排一个作业偶尔更新


实现这一点的最佳算法/SQL(或CLR集成)实现是什么?

我最近不需要通过模糊字符串匹配来连接组名。
我已经尝试了大约40种不同的算法,但没有一种算法能够很好地做到这一点,尽管组名的书写方式只存在一些拼写错误、缺少空格以及偶尔在末尾添加_mLF

因此,如果您尝试类似的操作,我强烈建议您立即停止,并将数据(在我的示例中是Excel文件)发送回用户进行更正,因为这些数据属于用户

如果您真的只是对比较字符串感兴趣,那么此链接可能正是您所需要的:


在我的例子中,我发现Jaro Winkler函数可以产生最好的结果,但是你可以自己测试。

为什么你要限制自己在SQL中实现它?我想它不需要在SQL中实现。但是,我假设纯SQL实现的性能会更好。我可能会使用.NET CLR集成,如。。。但我没有SQL Server CLR集成的经验,我仍然不知道要使用什么算法。你可以尝试的是取字符串,只考虑某些字母的实例,然后使用这些字符串。例如,像“LROM IMPUE乱数假文”这样的文本,只考虑E和T的实例。结果字符串将是etet,您可以将其与另一个过滤字符串进行比较。显然需要一些调整,但希望您能理解。@kevmo314很有趣。我认为删掉字母表中相当一部分的目的是为了帮助匹配单段落匹配?@DavidBudiac Sorta。一般的想法是,因为Levenshtein是O(n^2),减少75%的n会使性能提高94%,我们希望利用这一点。我们还知道,很多时候,即使缺少字符,也可以插入单词,因此通过删除字符,我们可以生成一种更像文本签名的压缩版本,而不是像deflate那样的压缩。这也滥用了我们永远不需要“解压缩”签名的事实是的,理想情况下我会告诉用户停止输入重复文本。但有些人还是会继续这样做。。。我需要能够追溯发现内容何时重复/相似。那篇文章肯定有帮助。我还发现这种模糊搜索算法的性能相当好: