code wiki / _hdl_build / _bm25_rank_authored.nx
_bm25_rank_authored.nx source
↩ module page · 13 lines · 908 B
1// AUTHORED BY THE NISHI BUILDER (bm25-rank template) -- BM25 TF relevance, bits-up integer fixed-point
2import "nx_syscalls.nx"
3func bm25_tf_score(tf: i64, doclen: i64, avgdl: i64) -> i64 { if avgdl<=0 { return 0 } let ratio: i64=(doclen*1000)/avgdl; let denom: i64=tf*1000+300+(900*ratio)/1000; if denom<=0 { return 0 } return (tf*22000000)/denom }
4func bm25_rank(tf0: i64, l0: i64, tf1: i64, l1: i64) -> i64 { let avgdl: i64=(l0+l1)/2; let s0: i64=bm25_tf_score(tf0,l0,avgdl); let s1: i64=bm25_tf_score(tf1,l1,avgdl); if s0>=s1 { return 0 } return 1 }
5func main() -> i64 {
6 let r1: i64=bm25_rank(3,100,1,100)
7 let r2: i64=bm25_rank(2,50,2,200)
8 let sa: i64=bm25_tf_score(3,100,100); let sb: i64=bm25_tf_score(1,100,100)
9 let sc: i64=bm25_tf_score(2,50,100); let sd: i64=bm25_tf_score(2,200,100)
10 if r1==0 { if r2==0 { if sa>sb { if sc>sd { sys_exit(0) } } } }
11 sys_exit(1)
12 return 1
13}