File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ from .bm25 import BM25Transformer
Original file line number Diff line number Diff line change 1+ import numpy as np
2+ import scipy .sparse as spr
3+ from sklearn .base import BaseEstimator , TransformerMixin
4+
5+
6+ class BM25Transformer (BaseEstimator , TransformerMixin ):
7+ def __init__ (self , b : float = 0.7 , k1 : float = 8 ):
8+ self .b = b
9+ self .k1 = k1
10+
11+ def fit (self , X , y = None ):
12+ self .N_ = X .shape [0 ]
13+ self .avgdl_ = X .sum (axis = 1 ).mean ()
14+ self .term_freq_ = np .ravel (np .asarray ((X > 0 ).sum (axis = 0 )))
15+ self .idf_ = np .log (
16+ (self .N_ - self .term_freq_ + 0.5 ) / (self .term_freq_ + 0.5 )
17+ )
18+ return self
19+
20+ def transform (self , X ):
21+ if spr .issparse (X ):
22+ X = spr .csr_array (X )
23+ d_len = np .ravel (np .asarray (X .sum (axis = 1 )))
24+ K_D = 1 - self .b + self .b * d_len / self .avgdl_
25+ return (
26+ self .idf_ [None , :]
27+ * (X * (self .k1 + 1 ))
28+ / (X + self .k1 * K_D [:, None ])
29+ )
30+
31+ def fit_transform (self , X , y = None ):
32+ return self .fit (X , y ).transform (X )
You can’t perform that action at this time.
0 commit comments