Spark CountVectorizer

时间:2020-01-09
本文章向大家介绍Spark CountVectorizer,主要包括Spark CountVectorizer使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1、概念

  * CountVectorizer和CountVectorizerModel旨在帮助将文本文档的集合转换为令牌计数的向量。
  * 当先验字典不可用时,CountVectorizer可用作估计器以提取词汇表并生成CountVectorizerModel。
  * 该模型为词汇表上的文档生成稀疏向量表示方式,然后可以将其传递给其他算法,例如LDA。
  *
  * 在拟合过程中,CountVectorizer将选择整个语料库中按词频排列的前vocabSize词。
  * 可选参数minDF还通过指定一个术语必须出现在词汇表中的最小数量(或小于1.0的分数)来影响拟合过程。
  * 另一个可选的二进制切换参数控制输出向量。如果将其设置为true,则所有非零计数都将设置为1。
  * 这对于模拟二进制而不是整数计数的离散概率模型特别有用。

2、code

package com.home.spark.ml

import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}


object Ex_CountVectorizer {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf(true).setMaster("local[*]").setAppName("spark ml label")
    val spark = SparkSession.builder().config(conf).getOrCreate()

    val df = spark.createDataFrame(Seq(
      (0, Array("a", "b", "c")),
      (1, Array("a", "b", "b", "c", "a"))
    )).toDF("id", "words")


    // fit a CountVectorizerModel from the corpus
    val cvModel: CountVectorizerModel = new CountVectorizer()
      .setInputCol("words")
      .setOutputCol("features")
      //词汇表最大容量,维度大小,本例是出现最高的三个单词
      .setVocabSize(3)
      //至少在两个文档中出现过的词
      .setMinDF(2)
      .fit(df)

    //查看词汇表里的单词
    println("vocabulary词库:"+cvModel.vocabulary.mkString(",")) //b,a,c

    cvModel.transform(df).show(false)
    // todo  features表示向量,表示模型词库在待训练文本中出现向量标识
    //       按照词库(b,a,c)的顺序,在df中出现的词向量,即(维度大小,[序号],[频率])

//    vocabulary词库:b,a,c
//    +---+---------------+-------------------------+
//    |id |words          |features                 |
//    +---+---------------+-------------------------+
//    |0  |[a, b, c]      |(3,[0,1,2],[1.0,1.0,1.0])|
//    |1  |[a, b, b, c, a]|(3,[0,1,2],[2.0,2.0,1.0])|
//    +---+---------------+-------------------------+

    val model = new CountVectorizerModel(Array("d","a","f","c"))
        .setInputCol("words").setOutputCol("features")
    model.transform(df).show(false)

//    +---+---------------+-------------------+
//    |id |words          |features           |
//    +---+---------------+-------------------+
//    |0  |[a, b, c]      |(4,[1,3],[1.0,1.0])|
//    |1  |[a, b, b, c, a]|(4,[1,3],[2.0,1.0])|
//    +---+---------------+-------------------+

    spark.stop()

  }
}

原文地址:https://www.cnblogs.com/asker009/p/12172404.html