tfidf原理及实现
TFIDF原理
TF:单词词频。一个词在文章中出现的频率,公式:tf=词在文章中出现的次数/文章总的词汇数。文章可以是一个句子,也可以是一篇文章,根据具体情况定。
idf:逆文件频率。词在该文章中出现的次数越少,越能够代表该文章。
IDF=log(语料库的总文档数/包含该词条的文档数+1),分母+1是为了避免分母为0
TFIDF=TF*IDF
代码实现:
两种方法:gesim实现和sklearn实现。先提供gensim的版本的实现
gesim实现:
from gensim import corpora,similarities,models
import jieba
#第一步:确定语料库的语料和要进行判断的句子:
#wordlist作为语料库,语料库中有三句话,相当于三篇文章.比较sentences和wordlist中三句话的相似度
wordlist=['我喜欢编程','我想变漂亮','今天吃午饭了吗']
#注意这里是个字符串
sentenses='我喜欢什么'
#第二步:使用语料库建立词典,也就是给预料库中的每个单词标上序号,类似:{'我':1,'喜欢':2,'编程':3,....}首先进行中文分词
text=[[word for word in jieba.cut(words) ]for words in wordlist]
dictionary=corpora.Dictionary(text)
#第三步,对语料中的每个词进行词频统计,doc2bow是对每一句话进行词频统计,传入的是一个list
#corpus得到的是一个二维数组[[(0, 1), (1, 1), (2, 1)], [(3, 1), (4, 1)], [(5, 1), (6, 1), (7, 1), (8, 1), (9, 1)]],意思是编号为0的词出现的频率是1次,编号为2的词出现的频率是1次
corpus=[dictionary.doc2bow(word) for word in text]
#第四步:使用corpus训练tfidf模型
model=models.TfidfModel(corpus)
#要是想要看tfidf的值的话可以:tfidf=model[corpus]
'''
tfidf的结果是语料库中每个词的tfidf值
[(0, 0.5773502691896258), (1, 0.5773502691896258), (2, 0.5773502691896258)]
[(3, 0.7071067811865475), (4, 0.7071067811865475)]
[(5, 0.4472135954999579), (6, 0.4472135954999579), (7, 0.4472135954999579), (8, 0.4472135954999579), (9, 0.4472135954999579)]
'''
#第五步:为tfidf模型中的每个句子建立索引,便于进行相似度查询,传入的时候语料库的tfidf值
similarity=similarities.MatrixSimilarity(tfidf)
#第六步,处理要比较的句子,首先分词,其次获得词频,jieba只能传入字符串
sen=[word for word in jieba.cut(sentenses)]
//doc2传入的是一个列表
sen2=dictionary.doc2bow(sen)
#然后计算它的tfidf值
sen_tfidf=model[sen2]
#获得与所有句子的相似度,sim输出的是一个数组
sim=similarity[sen_tfidf]
#获得最大值,转化成list进行操作,使用list的max函数
max_sim=max(list(sim))
#获得最大值索引,使用list的index函数
max_index=sim.index(max)
tfidf如何表示一个句子:
加入一个句子有n个单词,每个单词计算出它的tfidf值,即每个单词用一个标量表示,则句子的维度是1*n
如果是用embedding表示法,每个单词用m维向量表示,句子的维度是m*n
保存和加载模型的方法:
保存词典:
dictionary.save(DICT_PATH)
保存tfidf模型:model.save(MODEL_PATH)
保存相似度
similarity.save(SIMILARITY_PATH)
加载词典:
dictionary = corpora.Dictionary.load('require_files/dictionary.dict')
加载模型
tfidf = models.TfidfModel.load("require_files/my_model.tfidf")
加载相似度
index=similarities.MatrixSimilarity.load('require_files/similarities.0')
tfidf原理及实现相关推荐
- TF-IDF 原理及sklearn中的tf-idf实例分析
背景介绍 在一个大的文本语料库中,一些单词将出现很多次(例如 "the", "a", "is" 是英文),因此对文档的实际内容没有什么有意义 ...
- 自然语言处理(NLP)之TF-IDF原理及使用
TF-IDF介绍 TF-IDF是NLP中一种常用的统计方法,用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度,通常用于提取文本的特征,即关键词.字词的重要性随着它在文件中出现的次数 ...
- TF-IDF原理和使用以及算法详解
最近在做一些NLP的研究,由于也是第一次做这个东西,其实还是发现很多有意思的东西. 相信很多做过NLP的人都应该接触过提取关键词的这个功能.现在有很多可以使用的第三方工具包可以很容易的来实现这个功能, ...
- 英文关键词计算tf-idf 余弦相似度_TFIDF原理与实践
TF-IDF原理 TF-IDF通常应用于文本关键词提取.要提取一个文章的关键词,一个容易想到的思路就是找到出现次数最多的几个词.这是因为如果某个词很重要,它应该在这篇文章中多次出现.于是,我们进行&q ...
- TF-IDF与BM25算法原理
1. TF-IDF原理 TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的一份文件的重要程度.字词的重要性随着它在文件中出现的次数成正比,但同时会随着它在语料库中出现的频率成反比 ...
- NLP学习__task3: : 特征提取:TF-IDF、词向量表示、互信息原理、特征筛选
1 TF-IDF原理 TF-IDF原理在另一篇博客:关键词抽取模型 已经提及,这里不在重复. 2 文本矩阵化 笔者理解的文本矩阵化,即将文本进行"词向量化".这里简述常见的语言表 ...
- TF-IDF(term frequency–inverse document frequency)
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术. 1.什么是TF-IDF TF-IDF是一种统计方法,用以 ...
- 数据挖掘:基于TF-IDF算法的数据集选取优化
前言: 此前在做一个关于文本分类的小调研.本人使用的是基于朴素贝叶斯的文本分类算法,关于朴素贝叶斯的文本分类更多的内容,请参见<数据挖掘:基于朴素贝叶斯分类算法的文本分类实践>. 不过在做 ...
- 短文本分析----基于python的TF-IDF特征词标签自动化提取
绪论 最近做课题,需要分析短文本的标签,在短时间内学习了自然语言处理,社会标签推荐等非常时髦的技术.我们的需求非常类似于从大量短文本中获取关键词(融合社会标签和时间属性)进行用户画像.这一切的基础就是 ...
- python文献检索工具与技巧答案_短文本分析----基于python的TF-IDF特征词标签自动化提取...
绪论 最近做课题,需要分析短文本的标签,在短时间内学习了自然语言处理,社会标签推荐等非常时髦的技术.我们的需求非常类似于从大量短文本中获取关键词(融合社会标签和时间属性)进行用户画像.这一切的基础就是 ...
最新文章
- java开发企业级权限管理系统_Java开发企业级权限管理系统 视频教程
- 滚动焦点图实现原理和实践[原创视频]
- mysql 创建表_MySQL创建表(十一)
- 抓wifi包工具linux,测试工具之在Ubuntu使用Wireshark抓无线数据包
- MVP+WCF+三层结构搭建项目框架(上)
- SpringBoot xml层SQL update之foreach循环的坑
- 下面的3条指令执行后,CPU几次修改IP?
- static成员变量的使用
- html loading 页面加载中(百分比)
- 常见卫星汇总--期待大神补充下载地址
- 2021-07-28 cad贱人工具箱5.8
- mysql +cobar_MySQL 中间件 cobar 初体验
- 92-Kafka详解
- bcdedit添加linux引导,用BCDEdit编辑启动菜单
- 在技术招聘中,HR 如何识别候选人的“味道”?
- 苹果原装转接头不能连html,变革之际 iPhone 7P原装lightning耳机及转接头拆解
- Web服务器入侵痕迹检测
- shogun-toolbox的安装与问题总结
- 如何使用peakview软件查看AB SCIEX 质谱下机数据
- 怎么压缩照片的大小?学会这几种方法随意压缩!
热门文章
- SW小技巧2:将属性链接到 SOLIDWORKS 工程图的简便方法
- 《淘宝技术这十年》简评
- k3服务器注册,K3服务器信任注册设置
- word文档的图片怎么保存到动易CMS上
- html仿百度贴吧,利用Canvas模仿百度贴吧客户端loading小球的方法示例
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(10):其它
- 【序列推荐】KDD2018|STAMP---基于注意力的短期记忆优先的推荐
- depot_tools
- 愿望实现了!办公软件全部装进口袋
- 电脑软件:主流的压缩软件对比,看完你就会选择了