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

标签 asp.net sql-server algorithm clr similarity

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

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

Fuzzy hashing听起来像是我要找的东西,但我不只是在寻找具有细微差别的重复内容。我独特的文本 block 中寻找具有细微差异的重复内容。而且我不知道如何在 SQL 中实现模糊哈希。 SOUNDEX()DIFFERENCE()似乎使用了模糊哈希,但对于我的用例来说非常不精确。

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

完成此任务的最佳算法/SQL(或 CLR 集成)实现是什么?

最佳答案

最近我不得不通过模糊字符串匹配来加入群组名称。
我已经尝试了大约 40 种不同的算法,但没有一种算法足以做到这一点,即使组名的编写只是一些拼写错误、缺少空格和偶尔在末尾添加 _mLF 的不同。

因此,如果您尝试类似的事情,我强烈建议您立即停止,并将数据(在我的例子中是 Excel 文件)发回给用户进行更正,在它所属的地方。

如果您真的只是对比较字符串感兴趣,这个链接可能正是您所需要的:
http://anastasiosyal.com/POST/2009/01/11/18.ASPX

我发现 Jaro-Winkler 函数在我的案例中产生了最好的结果,但你可以自己测试一下。

关于asp.net - SQL - 两个不同长度的字符串之间的相似性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624689/

相关文章:

c# - asp.net母版页执行的顺序

.net - 如何检查用户是否在 javascript 中传递了有效日期?

sql - 如何在 CTE 之后使用 if 语句 (SQL Server 2005)

python - 组合算法挑战

Firefox 无法理解 JavaScript 代码,但可以在所有其他浏览器中使用

asp.net - 模拟HttpContext不起作用

sql - 选择 Top 1 字段并分配给局部变量

c# - 某些 Excel 文件未从共享路径移动到 SQL Server

c++ - 在 for 循环中返回一个大数字

list - 稍微改变种子时稍微改变随机列表随机播放的输出