说明
获取原始数据并构建倒排索引后,可根据用户输入查找相关内容。
1、先对用户的输入进行分词。
2、然后根据倒排索引获取与每个单词相关的文章。
3、最后,计算每个单词和相关文章之间的分数。分数越高,相关性越大。
实例
defsearch(self,query): BM25_scores={} #对用户输入分词 #并将其变成{word:frequency,...}的形式 query=jieba.lcut_for_search(query) word2freq=self.format(query) #遍历每个词 #计算每个词与相关文章之间的得分(计算公式参考BM25算法) forwordinword2freq: 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基础教程
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)