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}