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

转的

import math
import jieba
from 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.Dself.docs = docsself.f = []  # 列表的每一个元素是一个dict,dict存储着一个文档中每个词的出现次数self.df = {} # 存储每个词及出现了该词的文档数量self.idf = {} # 存储每个词的idf值self.k1 = 1.5self.b = 0.75self.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) + 1for 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 = 0for word in doc:if word not in self.f[index]:continued = 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 scoredef simall(self, doc):scores = []for index in range(self.D):score = self.sim(doc, index)scores.append(score)return scoresif __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

BM25算法的python实现相关推荐

  1. BM25算法,python实现(源代码)

    BM25算法,python实现 直接上代码吧,公式在维基百科上搜一下.有帮助的话就点赞收藏一下吧,有问题直接评论,会进行答复. import json import math import os im ...

  2. 文本相似度bm25算法的原理以及Python实现(jupyter notebook)

    今天我们一起来学习一下自然语言处理中的bm25算法,bm25算法是常见的用来计算query和文章相关度的相似度的.其实这个算法的原理很简单,就是将需要计算的query分词成w1,w2,-,wn,然后求 ...

  3. TF-IDF和BM25算法原理及python实现

    目录 前言 一.TF-IDF TF定义: 逆文本频率指数(Inverse Document Frequency,IDF) TF-IDF(Term Frequency-inverse Document ...

  4. 如何使用BM25算法检索出最相关的序列

    背景 起因 博主正在进行的科研应用到了in-context learning这个范式,与传统的学习范式不同,情境中学习并不是真的学习,即不改变模型的参数,称为in-context inference ...

  5. 基于朴素贝叶斯的垃圾分类算法(Python实现)

    有代码和数据集的 https://blog.csdn.net/weixin_33734785/article/details/91428991 附有git库代码的 https://www.cnblog ...

  6. 手把手教你在多种无监督聚类算法实现Python(附代码)

    来源: 机器之心 本文约2704字,建议阅读6分钟. 本文简要介绍了多种无监督学习算法的 Python 实现,包括 K 均值聚类.层次聚类.t-SNE 聚类.DBSCAN 聚类. 无监督学习是一类用于 ...

  7. 八大排序算法的 Python 实现

    八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入 ...

  8. Fuzzy C Means 算法及其 Python 实现——写得很清楚,见原文

    Fuzzy C Means 算法及其 Python 实现 转自:http://note4code.com/2015/04/14/fuzzy-c-means-%E7%AE%97%E6%B3%95%E5% ...

  9. python中栈的描述是_数据结构与算法:Python语言描述 栈和队列.ppt

    数据结构与算法:Python语言描述 栈和队列 迷宫问题 迷宫问题的特点: 存在一集可能位置,一些位置相互连通,一步可达 一个位置可能连通若干位置,出现向前探查的多种可能(有分支) 目标是找到一条路径 ...

  10. 机器学习算法与Python实践之(六)二分k均值聚类

    机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...

最新文章

  1. 寻找人机之间的中间地带-评述3本人机协作的书
  2. php常见的类库-文件操作类
  3. 数据库分片教程mysql_简述MySQL分片中快速数据迁移
  4. php获取上海时间代码,PHP获取星期的方法及代码
  5. 如何保住我们的头发?初级程序员的碎碎念
  6. 魔兽争霸Ⅲ运行时不能初始化directX的错误解决
  7. mycncart操作使用教程 - 商品分类
  8. 世界时钟 软件_Clocker for Mac(世界时钟软件)
  9. ThreadPoolExecutor 中的workerDone(this); 为什么会时不时的就会在这个地方停下来???
  10. fread 单独测试没有问题 在正式项目里面丢数据 可能是系统资源不足 预读出了问题
  11. 3ds max sdk导出插件编写的心得
  12. Windows进程间各种通信方式浅谈(转)
  13. 求立方根_12.初中数学:立方根号a,等于0.1738,怎么求a的值?期末考试真题
  14. Unity3D游戏框架之dll反编译和混淆
  15. JAVA 面试 事务_《java面试宝典》之事务常见面试题
  16. bugku(Crypto)---ook
  17. Ghelper安装及使用
  18. 计算机高配方案,电脑主机i5 9400F升10400/GTX1660Super高配吃鸡方案推荐
  19. http://www.sciencedirect.com/ 外文文献免费全文下载方法
  20. SSTV慢速扫描的几种模式优劣对比

热门文章

  1. 7. 锁定框架(The Locking Framework)
  2. 【渝粤教育】电大中专消费者行为学 (2)作业 题库
  3. 【颅内出血识别问题】数据分析与可视化
  4. Pandas系列(九)axis参数理解
  5. ROS-Kinetic安装turtlebot-3并仿真
  6. 什么是迁移学习?迁移学习的实现方法与工具分析
  7. Replica set 的选举策略之一 (转)
  8. 读图,特征提取——形状
  9. UIViewController的生命周期
  10. 涉及到大小变化,类似QScrollArea判断大小是否显示滚动条