如果没有"做高级的东西",我可以更好地使这个搜索相关性功能?

Ace*_*Ace 2 java search-engine

我的搜索引擎使用以下函数来计算相关性.

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;
}
Run Code Online (Sandbox Code Playgroud)

没有什么花哨的,而且我也没有足够的时间去做任何花哨的事情,但是我是否有任何简单的改进可以使功能更好地提升相关的东西,并保持不相关的东西?无需评论速度优化,这只是函数的"功能部分":)

谢谢.

cha*_*aos 9

不确定它是否算是花哨,但是soundex比较,可能在你的音阶上获得+1分,将与印刷的近乎未命中和同音异义词有一点相关性.

我建议使用停用词列表来阻止或从根本上减少从常用词中授予的相关性.如果有人正在寻找"马在屋顶上",你想要给予"马"和"屋顶"相关性,而不是大规模地提升包含"the"的所有内容.

另一个简单的提升是将一大堆相关性赋予包含整个搜索字符串的结果(大小写和标点符号不敏感).


Rom*_*man 5

经典的矢量空间模型实际上是标准的,非常简单(在实现中)的解决方案.

http://www.miislita.com/term-vector/term-vector-3.html

  • 哇,这让我头晕目眩.我希望我在数学上更倾向于:) (2认同)