我目前正在寻找一种方法来实现C#中的部分单词模式算法。我现在的情况如下所示:C#中部分单词的搜索算法#
我得到了搜索模式的文本字段。每当用户在此字段中输入或删除字符时,都会触发重新运行搜索算法的事件。因此,如果我想在字符串
“Facebook”,“Facelifting”,“”Faceless Face“(无论应该是什么)或通常任何现实生活句子中以字符串的形式搜索词”face“,
该算法首先在字段中键入“f”时开始运行,然后在字符串所在列表的顶部显示最相关的字符串。第二次运行时键入“fa”,列表这是继续,直到“面”完全键入的文本字段和列表再次排序
然而我不知道什么算法可以使用我试着从答案阿兰(Getting the closest string match),简单的Levenshtein - 距离算法以及一个自制算法,该算法通过
priority = (length_of_typed_pattern) * (amount_of_substr_matches)
计算优先在C#,后者看起来像这样:
count = Regex.Matches(Regex.Escape(title), pattern).Count;
priority = pattern.Length * count;
图案以及标题仅由小写字母组成。 到目前为止,我的结论:
- 汉明距离将没有任何意义,因为字符串是不一样的长度大部分时间
- 从阿兰答案工作正常,但前提是至少一个单词完全匹配(当你至少有一个单词与模式相同时,你只能找到最相关的字符串/句子,所以如果你有“face”类型并且有一个包含单词“facebook”的字符串,那么包含“facebook”的字符串是几乎从不是最高优先
其他想法c我该试试吗?目标是在最早的时刻以最少的字母排列字符串列表(使用最少的字母)。
您可以在Sprung/WindowMatcher.cs和Sprung/Window.cs中查看我的存储库搜索分支中的实现(http://github.com/croemheld/sprung)。
感谢您的帮助。