TF-IDF算法介绍,简单模拟,以及在图数据中应用

Posted PoetryAndTheDistance

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TF-IDF算法介绍,简单模拟,以及在图数据中应用相关的知识,希望对你有一定的参考价值。

 

一、百度百科关于TF-IDF的算法介绍

https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin

 

二、简单模拟

既然是简单模拟,我们就用人们最常用的一种工具mysql去模拟一下这个算法可以实现的效果

 

2.1、创建表以及数据

article_keywords.sql

CREATE TABLE `article_keywords` (
  `id` int NOT NULL AUTO_INCREMENT,
  `article` varchar(255) NOT NULL,
  `keyword` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


INSERT INTO `article_keywords` VALUES ('113', '悟空悟空芭蕉扇牛魔王', '悟空');
INSERT INTO `article_keywords` VALUES ('114', '悟空悟空芭蕉扇牛魔王', '悟空');
INSERT INTO `article_keywords` VALUES ('115', '悟空悟空芭蕉扇牛魔王', '芭蕉扇');
INSERT INTO `article_keywords` VALUES ('116', '悟空悟空芭蕉扇牛魔王', '牛魔王');
INSERT INTO `article_keywords` VALUES ('117', '悟空红孩儿红孩儿三昧真火三昧真火', '悟空');
INSERT INTO `article_keywords` VALUES ('118', '悟空红孩儿红孩儿三昧真火三昧真火', '红孩儿');
INSERT INTO `article_keywords` VALUES ('119', '悟空红孩儿红孩儿三昧真火三昧真火', '红孩儿');
INSERT INTO `article_keywords` VALUES ('120', '悟空红孩儿红孩儿三昧真火三昧真火', '三昧真火');
INSERT INTO `article_keywords` VALUES ('121', '悟空红孩儿红孩儿三昧真火三昧真火', '三昧真火');
INSERT INTO `article_keywords` VALUES ('122', '悟空三昧真火火眼金睛', '三昧真火');
INSERT INTO `article_keywords` VALUES ('123', '悟空三昧真火火眼金睛', '火眼金睛');
INSERT INTO `article_keywords` VALUES ('124', '悟空三昧真火火眼金睛', '悟空');

2.2、模拟实现TF-IDF的统计算分

实现sql

#实现TF-IDF的统计算分值
SELECT * FROM (
	#计算TF-IDF的值
	SELECT *,(TF * IDF)as 'TF-IDF' FROM (
		#分别计算TF和IDF的值
		SELECT *,(keyword_in_current_article_count / current_article_keyword_count) as TF,(article_count / keyword_in_all_article_count) as IDF FROM(
			#查询表中数据以及联查计算TF-IDF所需的各种聚合值以及直接聚合文章总数量的值
			SELECT article_keywords.*,keyword_in_current_article_count.keyword_in_current_article_count,current_article_keyword_count.current_article_keyword_count,keyword_in_all_article_count.keyword_in_all_article_count,(SELECT COUNT(1) FROM (SELECT article FROM article_keywords GROUP BY article) as a)as article_count FROM article_keywords as article_keywords 
			#联查关键词在当前文章中出现的频率的聚合表
			LEFT JOIN (SELECT article,keyword,COUNT(1) as keyword_in_current_article_count FROM article_keywords GROUP BY article,keyword)as keyword_in_current_article_count
			ON article_keywords.article = keyword_in_current_article_count.article AND article_keywords.keyword = keyword_in_current_article_count.keyword
			#联查当前文章中所有关键词的个数的聚合表
			LEFT JOIN (SELECT article,COUNT(keyword) as current_article_keyword_count FROM article_keywords GROUP BY article) as current_article_keyword_count
			ON article_keywords.article = current_article_keyword_count.article
			#联查出现此关键词的文章个数的聚合表
			LEFT JOIN (SELECT a.keyword as keyword,COUNT(article) keyword_in_all_article_count FROM (
				SELECT article,keyword FROM article_keywords GROUP BY article,keyword
			)as a GROUP BY a.keyword)as keyword_in_all_article_count
			ON article_keywords.keyword = keyword_in_all_article_count.keyword
		) as article_keywords_tf_idf
	) as article_keywords_tfidf
)as article_keywords_tfidf_order 
#WHERE keyword = '三昧真火'
GROUP BY article,keyword ORDER BY article_keywords_tfidf_order.`TF-IDF` DESC

结果样例

这只是用大家都熟悉的一个MySQL做一个简单的模拟实现的效果

当然,在实际应用中的场景比这要复杂的多,而且实际应用也不会使用MySQL来实现

下面我们来看看在图数据中的一个实际应用场景

三、图数据中应用

 

 

以上是关于TF-IDF算法介绍,简单模拟,以及在图数据中应用的主要内容,如果未能解决你的问题,请参考以下文章

TF-IDF算法介绍,简单模拟,以及在图数据中应用

TF-IDF算法介绍,简单模拟,以及在图数据中应用

3.TF-IDF算法介绍应用NLTK实现TF-IDF算法Sklearn实现TF-IDF算法算法的不足算法改进

翻译: 词频逆文档频率TF-IDF算法介绍及实现 手把手用python从零开始实现

翻译: 词频逆文档频率TF-IDF算法介绍及实现 手把手用python从零开始实现

翻译: 词频逆文档频率TF-IDF算法介绍及实现 手把手用python从零开始实现