我的搜索引擎使用以下函数来计算相关性。
private static int calculateScore(String result, String searchStr, int modifier)
{
String[] resultWords = result.split(" ");
String[] searchWords = searchStr.split(" ");
int score = 0;
for (String searchWord : searchWords)
{
for (String resultWord : resultWords)
{
if (resultWord.equals(searchWord))
score += 10;
else if (resultWord.startsWith(searchWord))
score += 4;
else if (resultWord.endsWith(searchWord))
score += 3;
else if (resultWord.contains(searchWord))
score += 1;
}
}
return score;
}
没有什么花哨的,而且我也没有足够的时间去做任何花哨的事情,但我是否有任何简单的改进可以让这个功能更好地提升相关的东西,并保持不相关的东西? 无需评论速度优化,这只是函数的“功能部分”:)
感谢。
答案 0 :(得分:9)
不确定它是否算得上是花哨的,但是soundex comparison,可能会在你的音阶上获得+1分,会给排印错误和同音异义词带来一些相关性。
我建议使用stop word list来阻止或从根本上减少普通单词授予的相关性。如果有人正在寻找“马在屋顶上”,你想要给予“马”和“屋顶”相关性,而不是大规模地提升包含“the”的所有内容。
另一个简单的提升是将一大堆相关性授予包含整个搜索字符串的结果(大小写和标点符号不敏感)。
答案 1 :(得分:5)
经典的向量空间模型实际上是标准的,非常简单(在实现中)解决方案。
答案 2 :(得分:2)
你也应该在做出平等之前对案例进行规范化。
答案 3 :(得分:2)
如果Levenshtein Distance低于某个阈值,您可以为分数添加+1。
答案 4 :(得分:2)
如果您想让搜索算法更复杂一点,请查看cosine similarity。它非常容易实现,并且在实践中运行良好。
答案 5 :(得分:1)
你可以:
答案 6 :(得分:0)
很明显,但你想要小写一切。