博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BM25算法的python实现
阅读量:5105 次
发布时间:2019-06-13

本文共 2030 字,大约阅读时间需要 6 分钟。

原作者:https://blog.csdn.net/u011734144/article/details/79559295

转的

import mathimport jiebafrom utils import utils # 测试文本text = '''自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。自然语言处理并不是一般地研究自然语言,而在于研制能有效地实现自然语言通信的计算机系统,特别是其中的软件系统。因而它是计算机科学的一部分。''' class BM25(object):     def __init__(self, docs):        self.D = len(docs)        self.avgdl = sum([len(doc)+0.0 for doc in docs]) / self.D        self.docs = docs        self.f = []  # 列表的每一个元素是一个dict,dict存储着一个文档中每个词的出现次数        self.df = {} # 存储每个词及出现了该词的文档数量        self.idf = {} # 存储每个词的idf值        self.k1 = 1.5        self.b = 0.75        self.init()     def init(self):        for doc in self.docs:            tmp = {}            for word in doc:                tmp[word] = tmp.get(word, 0) + 1  # 存储每个文档中每个词的出现次数            self.f.append(tmp)            for k in tmp.keys():                self.df[k] = self.df.get(k, 0) + 1        for k, v in self.df.items():            self.idf[k] = math.log(self.D-v+0.5)-math.log(v+0.5)     def sim(self, doc, index):        score = 0        for word in doc:            if word not in self.f[index]:                continue            d = len(self.docs[index])            score += (self.idf[word]*self.f[index][word]*(self.k1+1)                      / (self.f[index][word]+self.k1*(1-self.b+self.b*d                                                      / self.avgdl)))        return score     def simall(self, doc):        scores = []        for index in range(self.D):            score = self.sim(doc, index)            scores.append(score)        return scores if __name__ == '__main__':    sents = utils.get_sentences(text)    doc = []    for sent in sents:        words = list(jieba.cut(sent))        words = utils.filter_stop(words)        doc.append(words)    print(doc)    s = BM25(doc)    print(s.f)    print(s.idf)    print(s.simall(['自然语言', '计算机科学', '领域', '人工智能', '领域']))

  

转载于:https://www.cnblogs.com/liangzp/p/9679145.html

你可能感兴趣的文章
Java遍历JSON
查看>>
【Winform窗体控件开发】之五 实现类型转换器TypeConverterAttribute
查看>>
oracle数据库 修改表空间数据文件大小,优化存储
查看>>
linux命令详解——eval
查看>>
如何整站开启php zlib(gzip)压缩
查看>>
ubuntu ftp server
查看>>
CCPC-Winter Camp div2 day1
查看>>
对极几何(Epipolar Geometry)
查看>>
函数声明和函数表达式
查看>>
个人信息校验
查看>>
javascript笔记(二)
查看>>
Java基础之基础语法
查看>>
A* 算法理解与实现
查看>>
关于凑数问题的dfs
查看>>
CSS浮动(float、clear)通俗讲解
查看>>
自定义异常以及异常的处理
查看>>
SQLite与MySQL、SQLServer等异构数据库之间的数据同步
查看>>
07.31《jQuery》——3.4克隆节点
查看>>
sqlplus常用设置
查看>>
ZOJ 1492 Maximum Clique 搜索最大团
查看>>