当前位置 : 主页 > 编程语言 > c语言 >

c# – 智能数据库搜索

来源:互联网 收集:自由互联 发布时间:2021-06-25
问题是有一个大约有20k客户记录的数据库,我想尽最大努力避免重复输入.该数据库是Microsoft SQL Server 2005,维护该数据库的应用程序是Microsoft Dynamics / SL.我正在创建一个与该数据库交互的
问题是有一个大约有20k客户记录的数据库,我想尽最大努力避免重复输入.该数据库是Microsoft SQL Server 2005,维护该数据库的应用程序是Microsoft Dynamics / SL.我正在创建一个与该数据库交互的ASP.NET Web服务.我的服务可以将客户记录插入数据库,从中读取记录或修改这些记录.无论是在我的Web服务中,还是通过MS Dynamics,还是在Sql Server中,我都希望在用户确认新记录添加之前提供可能的匹配列表.

因此,用户将提交记录,如果它似乎是唯一的,则记录将保存并返回新的ID.如果有可能重复,用户可以重新提交确认说“是的,我看到可能的重复,这是一个新记录,我想提交它”.

如果它只是标点符号或空格符号(例如,如果您输入“Company,Inc.”并且数据库中有“Company Inc”),这很容易,但如果有一些细微的变化,如“公司公司”怎么办? “而不是”公司公司“,或者如果有一个肥胖的手指拼写错误,例如”Cmpany,Inc.“甚至可以在列表中返回这样的记录?如果绝对不可能,我将处理我的问题如果由于重复需要合并记录,它只会导致更多的工作.

algorithm最适合您的细节在很大程度上取决于您的域名,所以我建议尝试一些不同的域名 – 您甚至可能需要合并一些才能获得最佳结果.缩写,尤其是特定领域的缩写,可能也需要进行预处理或标准化.

对于名字,你可能最好用phonetic algorithm – 考虑到发音.这些将使史密斯和施密特紧密相连,因为在说这些话时容易混淆. Double Metaphone是一个不错的首选.

对于胖指法,使用edit distance算法可能会更好 – 这会在2个单词之间产生“差异”.这些将史密斯和斯莫斯靠近得分 – 尽管2可能会通过语音搜索.

T-SQL有SOUNDEX和DIFFERENCE – 但它们很差. Levenshtein变体是规范选择,但是还有其他很好的选择 – 如果你找不到合适的许可实现,那么大多数变体在C#中都很容易实现.

所有这些都比C#更容易编码/使用C#(尽管我确实找到了可能在SQL中工作的double metaphone in a horrendous abuse of T-SQL).

虽然这个example is in Access(我从未真正查看过代码,或者使用过实现),但所包含的演示文稿可以很好地了解您最终可能需要做什么.代码可能值得一看,也许是来自VBA的端口.

网友评论