使用 Levenshtein 距离获取字符串的所有变体
Get all variations of a string using Levenshtein distance
我发现很多实现在 2 个字符串之间计算 Levenshtein,但是是否有任何实现可以使用 Levenshtein 距离(最大 2)为一个给定的字符串生成所有变化。
原因是,我正在使用 ElasticSearch 执行一些模糊搜索,但是由于我有大量查询,我遇到了一些性能问题,因为 ELK 每次都会计算这些可能性,我想存储这些值一次.
最常被引用的生成编辑距离的参考实现在Python,你可以看到它in this answer。
原作者在其博客底部链接了其他语言的后续实现,标题为 Other Computer Languages. There are 4 implementations in C#, this one in particular 是功能性的(我不确定这些实现是根据什么许可发布的,所以我不会转录它们到这个线程)。
但是在 ElasticSearch 中使用通配符搜索是正确的方法。引擎将尽可能高效地实施 approximate string matching - 可以基于许多不同的算法,最佳选择取决于您的数据结构等。
您可以通过自己生成编辑距离来简化使用,但在大多数情况下,如果您使用数据库或引擎,它们的实现将具有更好的性能。 (这是一项计算量大的任务,没有办法解决。)
我发现很多实现在 2 个字符串之间计算 Levenshtein,但是是否有任何实现可以使用 Levenshtein 距离(最大 2)为一个给定的字符串生成所有变化。
原因是,我正在使用 ElasticSearch 执行一些模糊搜索,但是由于我有大量查询,我遇到了一些性能问题,因为 ELK 每次都会计算这些可能性,我想存储这些值一次.
最常被引用的生成编辑距离的参考实现在Python,你可以看到它in this answer。
原作者在其博客底部链接了其他语言的后续实现,标题为 Other Computer Languages. There are 4 implementations in C#, this one in particular 是功能性的(我不确定这些实现是根据什么许可发布的,所以我不会转录它们到这个线程)。
但是在 ElasticSearch 中使用通配符搜索是正确的方法。引擎将尽可能高效地实施 approximate string matching - 可以基于许多不同的算法,最佳选择取决于您的数据结构等。
您可以通过自己生成编辑距离来简化使用,但在大多数情况下,如果您使用数据库或引擎,它们的实现将具有更好的性能。 (这是一项计算量大的任务,没有办法解决。)