我有一个产品的SQL Server表,每个产品都有一个在我们网站上公开的描述。我想要防止或者至少在描述过于相似时警告用户。每个产品的描述长度可能差别很大。
我想查询那些包含重复/相似文本段落/块的描述的产品。例如,字符串A有一堆独特的内容,但与字符串B共享相似/相同的段落。然而,我不确定哪种相似度算法最好使用:
- Levenshtein距离和Jaro-Winler距离算法似乎只能很好地处理短字符串。 - 我不确定最长公共子序列算法是否能够很好地考虑到大的差异。即它似乎忽略了两个字符之间的潜在空格,找到任何相似的组合序列。
我想查询那些包含重复/相似文本段落/块的描述的产品。例如,字符串A有一堆独特的内容,但与字符串B共享相似/相同的段落。然而,我不确定哪种相似度算法最好使用:
- Levenshtein距离和Jaro-Winler距离算法似乎只能很好地处理短字符串。 - 我不确定最长公共子序列算法是否能够很好地考虑到大的差异。即它似乎忽略了两个字符之间的潜在空格,找到任何相似的组合序列。
模糊哈希算法听起来像是我要找的,但我不只是要寻找有微小差异的重复内容。我还要寻找在唯一文本块内注入微小差异的重复内容。而且我不知道如何在SQL中实现模糊哈希。
SOUNDEX()和DIFFERENCE()似乎使用了模糊哈希,但对于我的用例来说不够精确。
理想情况下,相似性SQL函数应该快速,但我可以将缓存的相似值存储在另一个表中,并安排定期更新的作业。
哪种算法/SQL(或CLR集成)实现最好以实现此目标?