python搜索模块如何查询

说明

获取原始数据并构建倒排索引后,可根据用户输入查找相关内容。

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基础教程

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。