用MLib计算TF-IDF后如何从SparseVector获取idf-idf值对应的词?

Frank_hxc 2015-08-15 01:26:32
最近使用spark的MLIb来计算TF-IDF,按照官网的示例代码:

import org.apache.spark.rdd.RDD
import org.apache.spark.SparkContext
import org.apache.spark.mllib.feature.HashingTF
import org.apache.spark.mllib.linalg.Vector

val sc: SparkContext = ...

// Load documents (one per line).
val documents: RDD[Seq[String]] = sc.textFile("...").map(_.split(" ").toSeq)

val hashingTF = new HashingTF()
val tf: RDD[Vector] = hashingTF.transform(documents)

import org.apache.spark.mllib.feature.IDF

// ... continue from the previous example
tf.cache()
val idf = new IDF().fit(tf)
val tfidf: RDD[Vector] = idf.transform(tf)

最后得到是Vector的RDD,Vector是一个抽象类,在这里一般返回的是其子类SparseVector,包含了三个域:size,indices,values。 values是一个Double型的数组,就是文档中每个词的tf-idf值,可是,当我要取出这个值对应的词时,却发现无从下手,不知道找到对应的词汇。有没有大神知道呢?
...全文
1367 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
賣逗逗 2017-12-07
  • 打赏
  • 举报
回复
JavaRDD<Vector> idfvector=idfModel.transform(tagVectorTF); idfvector.foreach(new VoidFunction<Vector>() { /** * */ private static final long serialVersionUID = 1L; @Override public void call(Vector t) throws Exception { SparseVector ss=(SparseVector) t; double[] aa=ss.values(); System.out.println("idf--"+t+"-st--"+aa[2]); } }); java写法强转下就成了
空中的鱼1987 2016-08-11
  • 打赏
  • 举报
回复
hello, http://stackoverflow.com/questions/35205865/what-is-the-difference-between-hashingtf-and-countvectorizer-in-spark HashingTF不可逆的,CountVectorizer我也没找到如何逆,不知道你解决了没有? rube.q
RandyChan1 2016-02-28
  • 打赏
  • 举报
回复
Hi , 楼主解决了吗?能否说一下解决方法呢?
不做懦夫 2015-09-17
  • 打赏
  • 举报
回复
您好,你的问题解决了吗?同问怎么解决对应到词上去啊
程序员鼓励师 2015-08-16
  • 打赏
  • 举报
回复
这里好少人,您可以 @cloud881001问问

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧