• 技术文章 >Python技术 >Python基础教程

    python搜索模块如何查询

    小妮浅浅小妮浅浅2021-08-10 09:44:59原创2309

    说明

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

    1、先对用户的输入进行分词。

    2、然后根据倒排索引获取与每个单词相关的文章。

    3、最后,计算每个单词和相关文章之间的分数。分数越高,相关性越大。

    实例

    def search(self, query):
        BM25_scores = {}
     
        # 对用户输入分词
        # 并将其变成 {word: frequency, ...} 的形式
        query = jieba.lcut_for_search(query)
        word2freq = self.format(query)
     
        # 遍历每个词
        # 计算每个词与相关文章之间的得分(计算公式参考 BM25 算法)
        for word in word2freq:
            data = self.iindex.get(word)
            if not data:
                continue
            BM25_score = 0
            qf = word2freq[word]
            df = data['df']
            ds = data['ds']
            W = math.log((self.N - df + 0.5) / (df + 0.5))
            for doc in ds:
                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_score if doc_id in BM25_scores else BM25_score
     
        # 对所有得分按从大到小的顺序排列,返回结果
        BM25_scores = sorted(BM25_scores.items(), key = lambda item: item[1])
        BM25_scores.reverse()
        return BM25_scores

    以上就是python搜索模块的查询方法,希望对大家有所帮助。更多Python学习指路:python基础教程

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    专题推荐:python搜索模块
    上一篇:python如何定义索引模块类 下一篇:python PyQt5如何实现窗口功能

    相关文章推荐

    • 最好用的python搜索算法使用方法• await在python协程函数的使用• python统计字符串字符出现次数• python输入身份证号输出出生年月• python计数排序法是什么• python线程安全的介绍及解决方法• python迭代器协议支持的两种方法• python中chardet库的安装和导入• python chardet库的函数用法• python中使用动量交易策略• python动量交易策略的四个步骤• python time库有哪些时钟• python time.ctime()如何做时间加减法• python strftime获取当前时间• python mktime()如何计算时间• python数据模块类如何定义

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网