前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Github 项目推荐 | 用 tf * idf 计算文本之间的相似度

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

作者头像
AI研习社
发布2018-07-26 11:15:43
1.2K0
发布2018-07-26 11:15:43
举报
文章被收录于专栏:AI研习社

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

Github:

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

用法

代码语言:javascript
复制
require 'matrix'
require 'tf-idf-similarity'

创建一组文档:

代码语言:javascript
复制
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

代码语言:javascript
复制
model = TfIdfSimilarity::TfIdfModel.new(corpus)

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

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

代码语言:javascript
复制
model = TfIdfSimilarity::BM25Model.new(corpus)

创建一个相似矩阵:

代码语言:javascript
复制
matrix = model.similarity_matrix

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

代码语言:javascript
复制
matrix[model.document_index(document1), model.document_index(document2)]

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

代码语言:javascript
复制
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}

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

代码语言:javascript
复制
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 数量:

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI研习社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档