文本型数据的向量化:TF-IDF

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的值。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI启蒙研究院

从一个双控开关思考神经网络(上)

712
来自专栏互联网大杂烩

机器学习面试

线性回归的因变量是连续变量,自变量可以是连续变量,也可以是分类变量。如果只有一个自变量,且只有两类,那这个回归就等同于t检验。如果只有一个自变量,且有三类或更多...

794
来自专栏祝威廉

利用PySpark 数据预处理(特征化)实战

之前说要自己维护一个spark deep learning的分支,加快SDL的进度,这次终于提供了一些组件和实践,可以很大简化数据的预处理。

713
来自专栏瓜大三哥

多任务验证码识别

使用Alexnet网络进行训练,多任务学习:验证码是根据随机字符生成一幅图片,然后在图片中加入干扰象素,用户必须手动填入,防止有人利用机器人自动批量注册、灌水、...

4847
来自专栏非著名程序员

Android二维码扫描开发(三):zxing库的使用及图像亮度信息提取

? 前一篇给大家介绍了YUV图像格式,这一篇将会对zxing库,以及YUV图像和RGB图像的亮度信息提取做一下介绍。 zxing是google提供的一个开源的...

2207
来自专栏Spark学习技巧

SparkMLlib的数据类型讲解

SparkMLlib的数据类型讲解 Mllib支持单机上存储的本地向量和矩阵,也支持由一个或者多个RDD支持的分布式矩阵。本地向量和本地矩阵是简单的数据模型,用...

2547
来自专栏闪电gogogo的专栏

压缩感知重构算法之正则化正交匹配追踪(ROMP)

  在看代码之前,先拜读了ROMP的经典文章:Needell D,VershyninR.Signal recovery from incompleteand i...

2996
来自专栏数据小魔方

随机数函数

今天给大家分享几种常用的随机数函数! ▼ 在excel中生成随机数虽然不是很频繁的需求,但是简单了解几个随机数生成方式,偶尔还是很有帮助的。因为我们时常需要使用...

2604
来自专栏Python私房菜

用Python写算法 | 蓄水池算法实现随机抽样

现在有一组数,不知道这组数的总量有多少,请描述一种算法能够在这组数据中随机抽取k个数,使得每个数被取出来的概率相等。

731
来自专栏数据之美

相似文档查找算法之 simHash 简介及其 java 实现

传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。产生的两个签名,如果相等,说明原始内容在一定概 率 下是相...

37910

扫码关注云+社区