说明
在获取原始数据并构建倒排索引后,可以根据用户输入找到相关内容。
1、先分词用户的输入。
2、然后根据倒排索引获取与每个单词相关的文章。
3、最后,计算每个单词和相关文章之间的分数。分数越高,相关性越大。
实例
defsearch(self,query): BM25_scores={} #输入用户的分词 #并将其变成{word:frequency,...}的形式 query=jieba.lcut_for_search(query) word2freq=self.format(query) #遍历每个词 #计算每个单词和相关文章之间的分数(参考BM25算法计算公式) worwordinword2freq: data=self.iindex.get(word) ifnotdata: continue BM25_score=0 qf=word2freq[word] df=data['df'] ds=data['ds'] W=math.log((self.N-df+0.5)/(df+0.5)) fordocinds: doc_id=doc['id'] tf=doc['tf'] dl=doc['dl'] K=self.k1*(1-self.b+self.b*(dl/self.AVGDL)) R=(tf*(self.k1+1)/(tf+K))*(qf*(self.k2+1)/(qf+self.k2)) BM25_score=W*R BM25_scores[doc_id]=BM25_scores[doc_id]+BM25_scoreifdoc_idinBM25_scoreselseBM25_score #按从大到小的顺序排列所有分数,返回结果 BM25_scores=sorted(BM25_scores.items(),key=lambdaitem:item[1]) BM25_scores.reverse() returnBM25_scores
以上是python搜索模块的查询方法,希望对大家有所帮助。更多Python学习指导:python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。