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

2018 年 5 月 9 日 AI研习社 AI研习君

该库是具有 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

从Python入门-如何成为AI工程师

BAT资深算法工程师独家研发课程

最贴近生活与工作的好玩实操项目

班级管理助学搭配专业的助教答疑

学以致用拿offer,学完即推荐就业


新人福利


关注 AI 研习社(okweiwu),回复  1  领取

【超过 1000G 神经网络 / AI / 大数据资料】


用线性规划去计算句子之间的相似度

登录查看更多
0

相关内容

【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
斯坦福大学经典《自然语言处理cs224n》2020课件合集
专知会员服务
94+阅读 · 2020年5月25日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
知识神经元网络 KNN(简介),12页pdf
专知会员服务
13+阅读 · 2019年12月25日
【论文推荐】文本分析应用的NLP特征推荐
专知会员服务
33+阅读 · 2019年12月8日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
【推荐系统/计算广告/机器学习/CTR预估资料汇总】
专知会员服务
86+阅读 · 2019年10月21日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
Github项目推荐 | gensim - Python中的主题建模
AI研习社
15+阅读 · 2019年3月16日
计算文本相似度常用的四种方法
论智
33+阅读 · 2018年5月18日
如何编写一个拼写纠错器?
Python开发者
4+阅读 · 2017年11月6日
python文本相似度计算
北京思腾合力科技有限公司
24+阅读 · 2017年11月6日
Arxiv
7+阅读 · 2019年10月6日
Arxiv
3+阅读 · 2018年10月18日
VIP会员
相关VIP内容
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
281+阅读 · 2020年6月3日
斯坦福大学经典《自然语言处理cs224n》2020课件合集
专知会员服务
94+阅读 · 2020年5月25日
Transformer文本分类代码
专知会员服务
116+阅读 · 2020年2月3日
知识神经元网络 KNN(简介),12页pdf
专知会员服务
13+阅读 · 2019年12月25日
【论文推荐】文本分析应用的NLP特征推荐
专知会员服务
33+阅读 · 2019年12月8日
【书籍】深度学习框架:PyTorch入门与实践(附代码)
专知会员服务
160+阅读 · 2019年10月28日
【推荐系统/计算广告/机器学习/CTR预估资料汇总】
专知会员服务
86+阅读 · 2019年10月21日
机器学习入门的经验与建议
专知会员服务
90+阅读 · 2019年10月10日
相关资讯
Github项目推荐 | gensim - Python中的主题建模
AI研习社
15+阅读 · 2019年3月16日
计算文本相似度常用的四种方法
论智
33+阅读 · 2018年5月18日
如何编写一个拼写纠错器?
Python开发者
4+阅读 · 2017年11月6日
python文本相似度计算
北京思腾合力科技有限公司
24+阅读 · 2017年11月6日
Top
微信扫码咨询专知VIP会员