仅部分字符串上的Levenshtein距离(Java)

仅部分字符串上的Levenshtein距离(Java),java,regex,levenshtein-distance,Java,Regex,Levenshtein Distance,我有一个在线web应用程序,上面有一个菜单树,可以打开不同的小部件来执行不同的任务。随着应用程序越来越强大,这棵树变得越来越大,很难导航。我实现了一个搜索功能,用户只需键入菜单名或其中的一部分,我使用regex查找菜单树中与用户键入内容匹配的所有项目。我的正则表达式允许部分单词和交换单词,并且还将搜索限制在每个单词的开头。它不允许的一件事是拼写错误。我理解,为了允许拼写错误的单词,最好不要使用正则表达式,而是使用字符串距离方法,但我仍然希望允许部分单词和交换的单词。这可能吗 例如,现在,如果一个

我有一个在线web应用程序,上面有一个菜单树,可以打开不同的小部件来执行不同的任务。随着应用程序越来越强大,这棵树变得越来越大,很难导航。我实现了一个搜索功能,用户只需键入菜单名或其中的一部分,我使用regex查找菜单树中与用户键入内容匹配的所有项目。我的正则表达式允许部分单词和交换单词,并且还将搜索限制在每个单词的开头。它不允许的一件事是拼写错误。我理解,为了允许拼写错误的单词,最好不要使用正则表达式,而是使用字符串距离方法,但我仍然希望允许部分单词和交换的单词。这可能吗


例如,现在,如果一个菜单项是“财务利率维护”,则以下任何一项都将与该菜单项匹配:“财务”、“财务ra”、“利率财务”等。。“inance rate”不匹配,因为该菜单项的任何单词开头都没有出现“inance”。我想要像“fnane rate”和“rate Maintenance”这样的搜索,它们的拼写稍有错误,以便匹配。

我只需在每个选项上附加一个单词列表,同时维护一个包含所有单词的词典。然后,当用户输入查询时,程序将检查他们输入的每个单词是否都在字典中。如果没有,它会找到最接近的单词via。字符串距离并更正单词

最后,它可以建议菜单选项,其中大多数单词与正确的输入单词相同


拼写纠正器的一个很好的例子(虽然在python中)是at

,但“无意义率”是一个轻微的拼写错误,并不比“fnane-rate”更糟糕(事实上更接近)。为什么它不匹配,而后者应该匹配?这是没有意义的。就目前情况而言,“白炽率”不匹配,但我认为一旦实现了字符串距离,它就会匹配,但“anc率”可能不会匹配,因为字符串距离太大。绑定到单词开头的原因是因为我有类似“vic”这样的搜索与“地图服务”匹配,这是不可取的,因为有很多项目带有“service”一词,但当用户搜索“vic”时,他们通常搜索一个名为“vic”的菜单项,总体思路似乎不错,但是由于权限的原因,菜单是在登录时动态生成的,所以我必须在登录时生成一个字典并将其存储在会话中。这是可以做到的,也许是最好的答案,但我希望能有更直截了当的东西。我明白你的意思,这看起来确实是一项相当艰巨的工作。但是,生成字典和搜索在计算上并不昂贵。