zoukankan      html  css  js  c++  java
  • 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()
    
      }
    }
  • 相关阅读:
    反转链表 --剑指offer
    链表的倒数第K个节点
    打印1到最大的n位数----java实现
    Permutations java实现
    Generate Parentheses java实现
    Binary Tree Level Order Traversal java实现
    hadoop中日志聚集问题
    PIG的配置
    hadoop2.20.0集群安装教程
    Map/Reduce之间的Partitioner接口
  • 原文地址:https://www.cnblogs.com/asker009/p/12172404.html
Copyright © 2011-2022 走看看