当前位置:   article > 正文

BM25算法的python实现

bm25算法python实现

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

转的

  1. import math
  2. import jieba
  3. from utils import utils
  4. # 测试文本
  5. text = '''
  6. 自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。
  7. 它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
  8. 自然语言处理是一门融语言学、计算机科学、数学于一体的科学。
  9. 因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,
  10. 所以它与语言学的研究有着密切的联系,但又有重要的区别。
  11. 自然语言处理并不是一般地研究自然语言,
  12. 而在于研制能有效地实现自然语言通信的计算机系统,
  13. 特别是其中的软件系统。因而它是计算机科学的一部分。
  14. '''
  15. class BM25(object):
  16. def __init__(self, docs):
  17. self.D = len(docs)
  18. self.avgdl = sum([len(doc)+0.0 for doc in docs]) / self.D
  19. self.docs = docs
  20. self.f = [] # 列表的每一个元素是一个dict,dict存储着一个文档中每个词的出现次数
  21. self.df = {} # 存储每个词及出现了该词的文档数量
  22. self.idf = {} # 存储每个词的idf值
  23. self.k1 = 1.5
  24. self.b = 0.75
  25. self.init()
  26. def init(self):
  27. for doc in self.docs:
  28. tmp = {}
  29. for word in doc:
  30. tmp[word] = tmp.get(word, 0) + 1 # 存储每个文档中每个词的出现次数
  31. self.f.append(tmp)
  32. for k in tmp.keys():
  33. self.df[k] = self.df.get(k, 0) + 1
  34. for k, v in self.df.items():
  35. self.idf[k] = math.log(self.D-v+0.5)-math.log(v+0.5)
  36. def sim(self, doc, index):
  37. score = 0
  38. for word in doc:
  39. if word not in self.f[index]:
  40. continue
  41. d = len(self.docs[index])
  42. score += (self.idf[word]*self.f[index][word]*(self.k1+1)
  43. / (self.f[index][word]+self.k1*(1-self.b+self.b*d
  44. / self.avgdl)))
  45. return score
  46. def simall(self, doc):
  47. scores = []
  48. for index in range(self.D):
  49. score = self.sim(doc, index)
  50. scores.append(score)
  51. return scores
  52. if __name__ == '__main__':
  53. sents = utils.get_sentences(text)
  54. doc = []
  55. for sent in sents:
  56. words = list(jieba.cut(sent))
  57. words = utils.filter_stop(words)
  58. doc.append(words)
  59. print(doc)
  60. s = BM25(doc)
  61. print(s.f)
  62. print(s.idf)
  63. print(s.simall(['自然语言', '计算机科学', '领域', '人工智能', '领域']))

  

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/972276
推荐阅读
相关标签
  

闽ICP备14008679号