1.对于文本型数据的分类处理(或者其他的处理),根据ik和jcseg等分词器先对它们进行分词处理之后,大家都知道,计算机是处理不了汉字的,对于文本型的词我们如何才能让计算机处理呢?我们可以通过TF-IDF将文本型的数据向量化。对于TF-IDF的概念我就不再阐述,网上的资源非常多,这里我主要来看看是如何实现的。
2.测试数据的准备(pca.txt)
1,纵坐标 是 该词 在该 文章 中 的 权重 0,其 出发点 是 一个词 对于 分类 的 重要性 不但 取决于 其在 整个语料 中 出现 的 概率 0,那么 它 对于 分类 的 重要性 也是 不同 的 1,我们 是 祖国 的 接班人
说明:,前面的是类别,后面的是伪造的一些分词的结构,通过空格分割,具体的一篇文章,可以通过分词器将其分割成这样的。
3.代码实现
LableWords.scala
package com.iflytek.classifier
import java.io.Serializable
case class LableWords(label:String,words:Array[String]) extends Serializable{ }
TestTfIdf.scala
package com.iflytek.tfidf
import org.apache.spark.sql.SparkSession import org.apache.spark.ml.linalg.Vectors import org.apache.spark.ml.feature.HashingTF import org.apache.spark.ml.feature.IDF import com.iflytek.classifier.LableWords import org.apache.log4j.Logger import org.apache.log4j.Level
object TestTfIdf { def main(args: Array[String]): Unit = { val sc=SparkSession.builder().master("local").appName("tfidf").getOrCreate() Logger.getRootLogger.setLevel(Level.OFF) import sc.implicits._ val dataFile=sc.sparkContext.textFile("E:\\test\\pca.txt", 10) .map { line => val split=line.split(",") LableWords(split(0),split(1).split(" ")) }.toDS val tf=new HashingTF().setInputCol("words").setOutputCol("rawfeatures").setNumFeatures(10000)//10000表示设置的特征数 val tfdata=tf.transform(dataFile) val idf=new IDF().setInputCol("rawfeatures").setOutputCol("features").fit(tfdata) val idfdata=idf.transform(tfdata) idfdata.select("label", "features").foreach { x => println(x.apply(0)+" "+x.apply(1)) } } }
4.运行结果截图
说明:最左边的是类别(0,1)右边的10000是特征数,就是第一个[]里面的数据是每个词被转换成的数字,范围应该在特征数之间,后面的[]是这个词对应的tfidf的值。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有