Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Algorithm 通过字符串相似性对搜索结果进行分组的最有效方法_Algorithm_Search_E Commerce_Grouping_Fuzzy Search - Fatal编程技术网

Algorithm 通过字符串相似性对搜索结果进行分组的最有效方法

Algorithm 通过字符串相似性对搜索结果进行分组的最有效方法,algorithm,search,e-commerce,grouping,fuzzy-search,Algorithm,Search,E Commerce,Grouping,Fuzzy Search,我正在开发sql server 2008 DB和asp.net mvc web电子商务应用程序 我有不同的用户向数据库提供他们的产品,我想比较名称相似的产品的价格。 我知道字符串匹配是特定于域的,但我仍然需要最好的通用解决方案 对搜索结果进行分组的最有效方法是什么? 我应该使用Levenshtien距离算法递归地比较每个记录吗? 我应该在数据库中还是在代码中执行它? 是否有一种方法可以为该任务实时实现SSIS模糊分组? 使用SQLServer2008免费文本搜索是否有一种有效的方法 编辑1: 网

我正在开发sql server 2008 DB和asp.net mvc web电子商务应用程序

我有不同的用户向数据库提供他们的产品,我想比较名称相似的产品的价格。 我知道字符串匹配是特定于域的,但我仍然需要最好的通用解决方案

对搜索结果进行分组的最有效方法是什么? 我应该使用Levenshtien距离算法递归地比较每个记录吗? 我应该在数据库中还是在代码中执行它? 是否有一种方法可以为该任务实时实现SSIS模糊分组? 使用SQLServer2008免费文本搜索是否有一种有效的方法

编辑1: 网络图分析呢。如果我使用Levenshtien距离算法定义一个矩阵,我可以使用聚类算法(例如:clauset-newman-moore)来分离它们之间没有语音路径的组。 例如,我附上了尼克·约翰逊(见评论)猫狗(红线是集群)——通过使用克劳塞特·纽曼·摩尔,我创建了两个不同的集群,并将猫和狗分开

你觉得怎么样


这是一个聚类问题,因此计算起来很困难,但已知有大量算法可以精确和近似地解决此类问题。在和上的wikipedia页面上进行访问


一旦实现了一个集群算法,就可以将集群存储在数据库中,但我怀疑在添加的每个项目上重新计算集群的成本太高了。最好每小时或每天运行一次聚类算法。

如果你能找到一个合适的同义词库/本体,它基本上提供了最好的聚类-因为单词是概念树中的叶子,树中的距离是语义意义上单词之间的距离。因此,猫和狗的距离远不如花斑猫和印花布(猫),但它们比猫和香蕉更近,而香蕉和猫本身也比猫(n.)和跳跃(v.)更近

允许出现小的拼写错误(通过查找同义词库中拼写相似的单词来查找拼写不相似的单词)可以提高稳健性,但也可能由于同名词而产生意外的结果


至于在数据库或代码中执行,请在代码中执行。如果您可以缓存,则速度会更快

我会在DB中做,看到这个线程:和这个:在Levenshtein距离alg上。这很难-你如何将产品分组为“猫”、“车”、“酒吧”、“包”、“沼泽”、“狗”?它们之间的距离只有1,但“猫”和“狗”没有相似之处。那么,还有什么选择呢?也许是某种语义词典?还有其他想法吗?@NickJohnson:嗯。。。猫和汽车的距离为1。汽车和酒吧的距离也是1。但这说明猫和酒吧的距离是2,而不是1。你得从一只猫跳到另一只酒吧,不是吗?5只猫对狗。所以他们相距很远。虽然在图表中添加其他单词会导致猫和狗只相隔3步…@RobertKoritnik那么你会将这组单词分成哪些簇,为什么?(另外,请注意,从“猫”到“狗”的编辑距离为3.:)