Github 项目推荐 | 用 tf * idf 计算文本之间的相似度

该库是具有 tf * idf 权重的 Ruby 向量空间模型(VSM),它能够用 tf * idf 计算文本之间的相似度。

Github:

https://github.com/jpmckinney/tf-idf-similarity

用法

require 'matrix'
require 'tf-idf-similarity'

创建一组文档:

document1 = TfIdfSimilarity::Document.new("Lorem ipsum dolor sit amet...")
document2 = TfIdfSimilarity::Document.new("Pellentesque sed ipsum dui...")
document3 = TfIdfSimilarity::Document.new("Nam scelerisque dui sed leo...")
corpus = [document1, document2, document3]

使用 Term Frequency-Inverse Document Frequency 函数创建文档项矩阵:

https://en.wikipedia.org/wiki/Tf%E2%80%93idf

model = TfIdfSimilarity::TfIdfModel.new(corpus)

或者,使用 Okapi BM25 排名函数创建文档项矩阵:

https://en.wikipedia.org/wiki/Okapi_BM25

model = TfIdfSimilarity::BM25Model.new(corpus)

创建一个相似矩阵:

matrix = model.similarity_matrix

查找矩阵中两个文档的相似度:

matrix[model.document_index(document1), model.document_index(document2)]

打印文档中术语的 tf * idf 值:

tfidf_by_term = {}
document1.terms.each do |term|
  tfidf_by_term[term] = model.tfidf(document1, term)
end
puts tfidf_by_term.sort_by{|_,tfidf| -tfidf}

自行标记文档,例如通过排除停止词:

require 'unicode_utils'
text = "Lorem ipsum dolor sit amet..."
tokens = UnicodeUtils.each_word(text).to_a - ['and', 'the', 'to']
document1 = TfIdfSimilarity::Document.new(text, :tokens => tokens)

自己提供每个术语出现的次数和文档中的 token 数量:

require 'unicode_utils'
text = "Lorem ipsum dolor sit amet..."
tokens = UnicodeUtils.each_word(text).to_a - ['and', 'the', 'to']
term_counts = Hash.new(0)
size = 0
tokens.each do |token|
  # Unless the token is numeric.
  unless token[/\A\d+\z/]
    # Remove all punctuation from tokens.
    term_counts[token.gsub(/\p{Punct}/, '')] += 1
    size += 1
  end
end
document1 = TfIdfSimilarity::Document.new(text, :term_counts => term_counts, :size => size

详细信息请参阅文档:

https://www.rubydoc.info/gems/tf-idf-similarity

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-05-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏性能与架构

算法中描述复杂度的大O是什么意思?

简介 算法是解决问题的方法,通常一个问题会有多种解决方法,就是有多种算法,那么我们如何决定哪个算法更好或者更高效呢? 为了描述一个算法的效率,就用到了这个大O,...

36450
来自专栏王小雷

R语言基础命令与安装

1. R的安装过程 1.1.首先附上清华线路的下载链接Windows版3.3.1 1.2. 选择安装路径 ? 1.3. 注意根据自己的计算机位数选择,如我的是6...

25150
来自专栏超智能体

YJango:TensorFlow中层API Datasets+TFRecord的数据导入

2. 对接性:TensorFlow中也加入了高级API (Estimator、Experiment,Dataset)帮助建立网络,和Keras等库不一样的是:这...

1.1K230
来自专栏java初学

MD5算法

22840
来自专栏帮你学MatLab

《Experiment with MATLAB》读书笔记(二)

读书笔记(二) 这是第二部分函数与绘图 将代码复制到m文件即可运行 函数部分需新建m文件保存 %% 函数 % 变量在用之前先赋0站位 % 计数或者...

32170
来自专栏cs

python爬虫知识回顾

最常用的requests库, 通过requests对象的get方法,获取一个response对象。jsp的东西。

13830
来自专栏小小挖掘机

TensorFlow 和 NumPy 的 Broadcasting 机制探秘

在使用Tensorflow的过程中,我们经常遇到数组形状不同的情况,但有时候发现二者还能进行加减乘除的运算,在这背后,其实是Tensorflow的broadca...

14120
来自专栏转载gongluck的CSDN博客

[C++]:A*——A Star算法简介

A*算法 求最优解 算法一直维护两个表: Open和Close 将起点S加入Open中 将所有S可到达的点(障碍物以及位于Close表中的点均看成不可达...

48560
来自专栏时序数据库专栏

Elasitcsearch 底层系列 Lucene 内核解析之Point索引

       Luene是一款高性能、可扩展的信息检索库,可实现对文档元信息、文档内容的搜索功能。用户可以使用Lucene 或 基于Lucene开发的成熟产品N...

17640
来自专栏腾讯云Elasticsearch Service

Elasitcsearch 底层系列 Lucene 内核解析之Point索引

       Luene是一款高性能、可扩展的信息检索库,可实现对文档元信息、文档内容的搜索功能。用户可以使用Lucene 或 基于Lucene开发的成熟产品N...

62640

扫码关注云+社区

领取腾讯云代金券