diff --git a/src/main/java/com/thealgorithms/searches/BM25InvertedIndex.java b/src/main/java/com/thealgorithms/searches/BM25InvertedIndex.java index 1cfd2bbad8e4..aeddc591b32b 100644 --- a/src/main/java/com/thealgorithms/searches/BM25InvertedIndex.java +++ b/src/main/java/com/thealgorithms/searches/BM25InvertedIndex.java @@ -215,6 +215,6 @@ private double computeBM25Score(int termFrequency, double docLength, double idf) */ private double computeIDF(int docFrequency) { // Total number of documents in the index - return Math.log((totalDocuments - docFrequency + 0.5) / (docFrequency + 0.5)); + return Math.log((totalDocuments - docFrequency + 0.5) / (docFrequency + 0.5) + 1); } } diff --git a/src/test/java/com/thealgorithms/searches/BM25InvertedIndexTest.java b/src/test/java/com/thealgorithms/searches/BM25InvertedIndexTest.java index 8595e0a00683..2017c11dfb3c 100644 --- a/src/test/java/com/thealgorithms/searches/BM25InvertedIndexTest.java +++ b/src/test/java/com/thealgorithms/searches/BM25InvertedIndexTest.java @@ -50,13 +50,15 @@ void testSearchRanking() { // Perform search for the term "good" List results = index.search("good"); assertFalse(results.isEmpty()); - + for (SearchResult result : results) { + System.out.println(result); + } // Validate the ranking based on the provided relevance scores - assertEquals(6, results.get(0).getDocId()); // It's a Wonderful Life should be ranked 1st - assertEquals(7, results.get(1).getDocId()); // The Pursuit of Happyness should be ranked 2nd + assertEquals(1, results.get(0).getDocId()); // The Shawshank Redemption should be ranked 1st + assertEquals(8, results.get(1).getDocId()); // A Few Good Men should be ranked 2nd assertEquals(5, results.get(2).getDocId()); // Good Will Hunting should be ranked 3rd - assertEquals(8, results.get(3).getDocId()); // A Few Good Men should be ranked 4th - assertEquals(1, results.get(4).getDocId()); // The Shawshank Redemption should be ranked 5th + assertEquals(7, results.get(3).getDocId()); // The Pursuit of Happyness should be ranked 4th + assertEquals(6, results.get(4).getDocId()); // It's a Wonderful Life should be ranked 5th // Ensure the relevance scores are in descending order for (int i = 0; i < results.size() - 1; i++) {