TF-IDF算法--关键词句和文本集中每篇文章相关度计算
关键词句和文本集每篇文章相关度计算:假设语料库中有几万篇文章,每篇文章的长度不一,你任意输入关键词或句子,通过代码以tf-idf值为准检索出来相似度高的文章。
- 1、TF-IDF概述
TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
TFIDF实际上是:TF * IDF。TF-IDF值与该词的出现频率成正比,与在整个语料库中的出现次数成反比。
- 2、词频(TF)和逆文档频率IDF
TF词频(Term Frequency),IDF逆向文件频率(Inverse Document Frequency)。
词频 (TF)= 某个词在文章中出现的总次数/文章的总词数,TF表示词条在文档d中出现的频率。
逆文档频率(IDF) = log(词料库的文档总数/包含该词的文档数+1),为了避免分母为0,所以在分母上加1.。IDF的主要思想是:如果包含该词的文档数越少,也就是log里面分母越小,IDF越大,则说明该词具有很好的类别区分能力。
- 3、停用词和语料库(已分好词)
停用词大致分为两类。一类是人类语言中包含的功能词,这些功能词极其普遍,与其他词相比,功能词没有什么实际含义,比如'the'、'is'、'at'、'which'、'on'等。但是对于搜索引擎来说,当所要搜索的短语包含功能词,特别是像'The Who'、'The The'或'Take The'等复合名词时,停用词的使用就会导致问题。另一类词包括词汇词,比如'want'等,这些词应用十分广泛,但是对这样的词搜索引擎无法保证能够给出真正相关的搜索结果,难以帮助缩小搜索范围,同时还会降低搜索的效率,所以通常会把这些词从问题中移去,从而提高搜索性能。
该语料库每行是一篇文章,每篇文章前面是题目,后面是摘要。包含两万多篇文章,仅做测试用。
停用词表和语料库见百度云链接:链接:https://pan.baidu.com/s/1wNNUd0Pe20HFLAyuNcwDrg 密码:367d
- 4、python代码实现
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue Jul 31 10:57:03 2018 4 5 @author: Lenovo 6 """ 7 import jieba 8 import math 9 import numpy as np 10 11 filename = '句子相似度/title.txt'#语料库 12 filename2 = '句子相似度/stopwords.txt'#停用词表,使用的哈工大停用词表 13 14 def stopwordslist():#获取停用词表 15 stopwords = [line.strip() for line in open(filename2, encoding='UTF-8').readlines()] 16 return stopwords 17 18 stop_list = stopwordslist() 19 def get_dic_input(str): 20 dic = {} 21 22 cut = jieba.cut(str) 23 list_word = (','.join(cut)).split(',') 24 25 for key in list_word:#去除输入停用词 26 if key in stop_list: 27 list_word.remove(key) 28 29 length_input = len(list_word) 30 31 for key in list_word: 32 dic[key] = 0 33 34 return dic, length_input 35 36 def get_tf_idf(filename): 37 s = input("请输入要检索的关键词句:") 38 39 dic_input_idf, length_input = get_dic_input(s) 40 f = open(filename, 'r', encoding='utf-8') 41 list_tf = [] 42 list_idf = [] 43 word_vector1 = np.zeros(length_input) 44 word_vector2 = np.zeros(length_input) 45 46 lines = f.readlines() 47 length_essay = len(lines) 48 f.close() 49 50 for key in dic_input_idf:#计算出每个词的idf值依次存储在list_idf中 51 for line in lines: 52 if key in line.split(): 53 dic_input_idf[key] += 1 54 list_idf.append(math.log(length_essay / (dic_input_idf[key]+1))) 55 56 for i in range(length_input):#将idf值存储在矩阵向量中 57 word_vector1[i] = list_idf.pop() 58 59 for line in lines:#依次计算每个词在每行的tf值依次存储在list_tf中 60 length = len(line.split()) 61 dic_input_tf, length_input= get_dic_input(s) 62 63 for key in line.split(): 64 if key in stop_list:#去除文章中停用词 65 length -= 1 66 if key in dic_input_tf: 67 dic_input_tf[key] += 1 68 for key in dic_input_tf: 69 tf = dic_input_tf[key] / length 70 list_tf.append(tf) 71 72 for i in range(length_input):#将每行tf值存储在矩阵向量中 73 word_vector2[i] = list_tf.pop() 74 75 #print(word_vector2) 76 #print(word_vector1) 77 tf_idf = float(np.sum(word_vector2 * word_vector1)) 78 if tf_idf > 0.3:#筛选出相似度高的文章 79 print("tf_idf值:", tf_idf) 80 print("文章:", line) 81 82 get_tf_idf(filename)
- 5、输出结果
输入:人工智能发展趋势
输出如下:输出tf-idf值大于0.3的,从两万多篇中检索出12篇
转载于:https://www.cnblogs.com/Jm-15/p/9409226.html
TF-IDF算法--关键词句和文本集中每篇文章相关度计算相关推荐
- 关键词提取算法—TF/IDF算法
关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...
- 随笔_从《芳华》影评到TF/IDF算法
前两天看好多<芳华>的影评说:为什么好人没好报?于是感叹一堆世态炎凉,人性丑陋什么的.我觉得这问题是:为什么中央空调(对谁都温暖)往往不被看好. 先说说TF/IDF算法,这是一种信息处 ...
- 搜索引擎:文本分类——TF/IDF算法
原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...
- tfidf算法 python_tf–idf算法解释及其python代码实现(下)
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- 文本特征抽取的向量空间模型(VSM)和TF/IDF方法
文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...
- 使用lingpipe自然语言处理包进行文本分类/** * 使用 lingpipe的tf/idf分类器训练语料 * * @author laigood */ public class trai
/** * 使用 lingpipe的tf/idf分类器训练语料 * * @author laigood */ public class traintclassifier { //训练语料文件 ...
- tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类
tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...
- 网页去重||SimHash(高效的文本相似度去重算法)——适合大批量文档的相似度计算
网页去重 之前我们对下载的url地址进行了去重操作,避免同样的url下载多次.其实不光url需要去重,我们对下载的内容也需要去重. 在网上我们可以找到许多内容相似的文章.但是实际我们只需要其中一个即可 ...
- tf/idf_Neo4j:带密码的TF / IDF(和变体)
tf/idf 几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wik ...
最新文章
- kde重启_在Linux系统中出现KDE Plasma面板崩溃问题的解决方法
- 特斯拉放弃SAP,仅25个人4个月就开发了整套ERP!就问你服不服?
- 计算机工程 文章没有创新,【计算机基础论文】小议计算机专业人才创新力的培育(共1911字)...
- vs2017开发php,C#编写的可供PHP调用的com dll(Visual studio 2017)
- nginx访问本地目录一直不好使_nginx 配置根目录不生效问题
- Request.InputStream 将数据作为XML数据发送
- php数组循环便利,浅析PHP中for与foreach两个循环结构遍历数组的区别
- 计算机操作系统中程序的功能是,计算机操作系统的功能和分类研究
- visio2013复制到word有多余白边_学习工坊(一)|实用技巧之Word篇
- 基于JAVA+SpringMVC+Mybatis+MYSQL的药方中医管理系统
- go mongodb排序查询_Kotlin与MongoDB整合CURD案例详解
- Spring Security 入门(1-3-2)Spring Security - http元素 - intercept-url配置
- Exchange 2010安装必要条件
- CSDN下载频道于2014年7月17日改版,23日-24日系统维护
- Matlab:数模12-聚类分析
- 使用Notepad++实现文本编辑的豆沙绿背景颜色,护眼
- 使用datadog来监控os和postgresql数据库
- 《信息物理融合系统(CPS)设计、建模与仿真——基于 Ptolemy II 平台》——1.8 域和指示器概述...
- 实战ssl-bump,实现squid的url过滤功能
- flex 的 三个参数 flex:1 0 auto
热门文章
- MyBatis——mybatis-config.xml配置详细介绍
- Linux应用编程网络编程
- 数据库:数据库系统的体系结构
- 柯西-施瓦茨不等式(Cauchy-Schwarz Inequality)的四种形式
- 恭喜ulam获得《艺术品经营单位备案证明》
- 思考方式--教会你如何去思考!
- 【笔记】计算机网络-数据链路层
- 春节天猫快递照常送,菜鸟给全国的值守快递员发了团圆基金!
- matlab选取第一列和第三列,如何用matlab提取一个矩阵的第一列和第三列?
- 如何使用cmd进入打印机选项_怎么用cmd运行功能添加WiFi打印机?