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

时间:2010-08-06 18:43:46

标签: java regex levenshtein-distance

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

例如,现在,如果菜单项是“财务费率维护”,则以下任何一项都与该菜单项匹配:“财务”,“财务ra”,“费率财务”等。“inance rate “不会匹配,因为”inance“不会出现在该菜单项的任何单词的开头。我希望像“fnane rate”和“rate maintenanceance”这样的搜索稍有拼写错误。

1 个答案:

答案 0 :(得分:1)

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

最后,它可能会建议菜单选项与更正后的输入词共有最多的单词。

拼写纠正器的一个很好的例子(虽然在python中)位于http://norvig.com/spell-correct.html