Csharp/C#教程:在C#中超过100k +字符串的快速动态模糊搜索分享


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

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

这是受这个问题的启发:

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

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

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

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

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

如果您没有正确定义想要匹配的内容并进行衡量,那么您会在意外匹配中找到高分并在预期匹配中找到低分。 字符串匹配非常特定于域。 如果你没有正确定义你的域名,那么你就像一个没有线索的渔夫,扔钩子并希望最好。

这篇博文描述了Lucene在这方面的一些工作。 他们能够非常有效地使用有限状态传感器(自动机)实现Levenshtein距离模糊匹配,编码距离为2.尽管它是开源的,但代码全部都是用Java编写的,有点复杂。

但基本的想法很简单:把你的字典想象成一个巨大的字母状态树。 在state0,你没有信件。 在state1,您承认任何可能是单词首字母的字母。 State2受state1的限制; 如果第一个字母是’x’,则下一个州只允许跟随x的字母(位置2)。 等等

现在对于Levenshtein匹配,你遍历字母树,同时允许一些错误:删除,插入(一个字母的通配符),以及可能的转座(Levenshtein的一个很好的扩展是将转置视为单个编辑而不是2)。 您必须保持状态才能跟踪允许的编辑数量。 这可以非常有效地完成 – 肯定足够快,以便在您键入“拼写建议器时”进行交互。

上述就是C#学习教程:在C#中超过100k +字符串的快速动态模糊搜索分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1025827.html

(0)
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐