Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 25 additions & 7 deletions rank_bm25.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,13 +96,31 @@ def _calc_idf(self, nd):
idf = math.log(self.corpus_size - freq + 0.5) - math.log(freq + 0.5)
self.idf[word] = idf
idf_sum += idf
if idf < 0:
negative_idfs.append(word)
self.average_idf = idf_sum / len(self.idf)

eps = self.epsilon * self.average_idf
for word in negative_idfs:
self.idf[word] = eps
# if idf < 0:
# negative_idfs.append(word)
# self.average_idf = idf_sum / len(self.idf)
#
# eps = self.epsilon * self.average_idf
# for word in negative_idfs:
# self.idf[word] = eps

# 提取值为数字的条目
negative_values = [value for value in self.idf.values() if isinstance(value, (int, float)) and value < 0]

# 找到最小的负数
min_negative = min(negative_values) if negative_values else None

new_dict = {}
for word, idf in self.idf.items():
if idf > 0:
new_dict[word] = idf + 1
else:
min_value = min_negative - 0.1
max_value = 0
normalized = (idf - min_value) / (max_value - min_value)
new_dict[word] = normalized

self.idf = new_dict

def get_scores(self, query):
"""
Expand Down