在网站上创建“你是不是指XYZ”功能的想法

时间:2009-12-08 22:04:56

标签: c# sql-server asp.net-mvc

我想让用户能够搜索大量的商家名单,但仍能找到近乎匹配的商家。

当你没有针对简单的词典单词,而是针对像ABC商业名称这样的复杂名称时,有没有人有关于如何最好地解决这个问题的建议?

问候。

4 个答案:

答案 0 :(得分:7)

查看Levenshtein distance上的维基百科文章。这是一个相当简单的概念,无论你使用哪种语言,C#都可以很好地实现算法。

我在C#中为您here找到了一个示例。

此外,here是Google的Peter Norvig的拼写纠正器示例。有人在SO播客上说过几集,Jon Skeet试图用C#重写同样的算法。不确定他是否已完成和/或公开发布。

答案 1 :(得分:2)

考虑使用关键字匹配并编辑基于距离的相似性。可能会将“原始搜索”与“实际点击”结合起来。

答案 2 :(得分:1)

这可能是一个疯狂的解决方案,但您可以按空格分割商家名称,然后搜索所有商品或可能是第一对商品。

因此,您可以搜索“ABC”和“商家”,但忽略“名称”,因为这可能需要很长时间。

您甚至可以检查字符串是否具有一定长度,然后修剪并只搜索首先说5个字母。

您是否看过“soundex”作为搜索您商家的方式。同样,我认为您需要按空格分割名称。

答案 3 :(得分:1)

您可以查看SQL Server SOUNDEXDIFFERENCE函数。 SOUNDEX将一系列字符(例如单词)转换为4字符代码,对于类似发音的单词将是相同的。 DIFFERENCE给出一个数字,表示两个字符串基于声音的“不同”。

例如,您可以根据SOUNDEX函数创建一个计算列,并在以后匹配该列。或者您可以在WHERE子句中使用DIFFERENCE。