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

时间:2012-03-29 08:14:00

标签: algorithm search e-commerce grouping fuzzy-search

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

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

对搜索结果进行分组的最有效方法是什么? 我应该使用Levenshtien Distance算法递归地比较每个记录吗? 我应该在数据库中还是在代码中执行此操作? 有没有办法为此任务实时实施SSIS模糊分组? 有没有一种有效的方法来使用Sql server 2008自由文本搜索?

编辑1: 那么网络图分析呢。如果我使用Levenshtien Distance算法定义矩阵,我可以使用聚类算法(例如:clauset newman moore)和单独的组,它们之间没有语音路径。 我附上了尼克约翰逊(见评论)猫狗(例如红线是簇) - 并且通过使用clauset newman moore,我正在创建2个不同的簇并从狗中分离猫。

您怎么看?

enter image description here

2 个答案:

答案 0 :(得分:0)

这是一个聚类问题,因此在计算上很困难,但是已经有大量已知的解决这些问题的算法,无论是精确的还是近似的。请访问Cluster Analysisthis answer上的维基百科页面。

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

答案 1 :(得分:0)

如果你能得到一个基本上提供最佳聚类的合适的词库/本体 - 因为词是概念树中的叶子,树中的距离是语义意义上的词之间的距离。因此,猫和狗几乎不像虎斑猫和猫科动物(猫),但它们比猫和香蕉更接近,猫和香蕉本身比猫(n。)和跳跃(v。)更接近。

允许小的拼写错误(通过查找词库中用于非词语的类似拼写的单词)可以提高稳健性,但也可能因同音异义词而产生意外结果。

至于在数据库或代码中进行,请在代码中执行。在可以缓存的范围内,这将更快。

相关问题