在C#中超过100k +字符串的快速动态模糊搜索

Ham*_*jan 8 c# algorithm fuzzy-search .net-4.0 text-search

假设它们是预加载的股票代码,键入文本框.我正在寻找可以复制的代码,而不是要安装的库.

这是受这个问题的启发:

是否有为C#编写的模糊搜索或字符串相似性函数库?

Levenstein距离算法似乎运行良好,但计算需要时间.当用户输入额外的字母时,是否需要重新运行查询这一事实是否有任何优化?我有兴趣最多显示每个输入的前10个匹配项.

Kir*_*rst 6

您需要确定字符串周围的匹配规则.是什么决定了'类似的字符串'

  • 匹配字符数
  • 不匹配的字符数
  • 相似的长度
  • 拼写错误或语音错误
  • 业务特定缩写
  • 必须以相同的子字符串开头
  • 必须以相同的子字符串结尾

我已经完成了很多字符串匹配算法,还没有找到任何符合我特定要求的现有库或代码.检查它们,从中借鉴它们,但你总是必须自定义和编写自己的代码.

Levenstein算法很好但有点慢.我在Smith-Waterman和Jaro-Winkler算法上取得了一些成功,但我发现的最好的是Monge(来自内存).然而,阅读原始研究并确定他们编写算法和目标数据集的原因是值得的.

如果你没有正确定义你想要匹配和测量的内容,那么你会发现意外匹配得分高,预期匹配得分低.字符串匹配非常特定于域.如果你没有正确定义你的域名,那么你就像一个没有线索的渔夫,扔钩子并希望最好.