需要源码和数据集请点赞关注收藏后评论区留言私信~~~
特征抽取 TF-IDF
TF-IDF是两个统计量的乘积,即词频(Term Frequency, TF)和逆向文档频率(Inverse Document Frequency, IDF)。它们各自有不同的计算方法。
TF是一个文档(去除停用词之后)中某个词出现的次数。它用来度量词对文档的重要程度,TF越大,该词在文档中就越重要。IDF逆向文档频率,是指文档集合中的总文档数除以含有该词的文档数,再取以10为底的对数。
TF-IDF的主要思想是如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为这个词或者短语具有很好的类别区分能力
具体实现步骤如下
(1)新建MAVEN项目,名称为spark-mlllib
(2)数据准备。新建一个文本文件,包含四行数据,内容如下:
hello mllib hello spark
goodBye spark
hello spark
goodBye spark
(3)新建Scala类,功能是计算单词的TF –IDF
创建TF计算实例
val hashingTF = new HashingTF()
//计算文档TF值
val tf = hashingTF.transform(documents).cache()
println("计算单词出现的次数结果为:")
tf.foreach(println)
//创建IDF实例并计算
val idf = new IDF().fit(tf)
//计算TF_IDF词频
val tf_idfRDD: RDD[linalg.Vector] = idf.transform(tf)
统计结果如下
部分代码如下
package com.etc
import org.apache.spark.mllib.feature.{HashingTF, IDF}
import org.apache.spark.mllib.linalg
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object TF_IDF {
def main(args: Array[String]) {
//创建环境变量
val conf = new SparkConf()
//设置本地化处理
.setMaster("local")
//设定名称
.setAppName("TF_IDF") //设定名称
val sc = new SparkContext(conf)
//设置日志级别
sc.setLogLevel("error")
//读取数据并将句子分割成单词
val documents = sc.textFile("a.txt")
.map(_.split(" ").toSeq)
println("分词的结果为:")
documents.foreach(println)
//创建TF计算实例
val hashingTF = new HashingTF()
//计算文档TF值
val tf = hashingTF.transform(documents).cache()
println("计算单词出现的次数结果为:")
tf.foreach(println)
//创建IDF实例并计算
val idf = new IDF().fit(tf)
//计算TF_IDF词频
val tf_idfRDD: RDD[linalg.Vector] = idf.transform(tf) //计算TF_IDF词频
println("计算TF_IDF值:")
tf_idfRDD.foreach(println)
}
}
创作不易 觉得有帮助请点赞关注收藏~~~