文本词频Countvectorizer

1. 文本词频Countvectorizer 1.1 概念 CountVectorizer旨在通过计数来将一个文档转换为向量。当不存在先验字典时,Countvectorizer作为Estimator提取词汇进行训练,并生成一个CountVectorizerModel用于存储相应的词汇向量空间。该模型产生文档关于词语的稀疏表示,其表示可以传递给其他算法,例如LDA。
在CountVectorizerModel的训练过程中,CountVectorizer将根据语料库中的词频排序从高到低进行选择,词汇表的最大含量由vocabsize超参数来指定,超参数minDF,则指定词汇表中的词语至少要在多少个不同文档中出现

1.2 示例 假设我们有如下的DataFrame包含id和texts两列:
id | texts
----|----------
0 |Array("a", "b","c")
1 |Array("a", "b","b", "c","a")
文本中的每一行都是一个文档类型的数组(字符串)。调用的CountVectorizer产生词汇(a,b,c)的CountVectorizerModel,转换后的输出向量如下:
id | texts | vector
----|---------------------------------|---------------
0 |Array("a", "b","c") | (3,[0,1,2],[1.0,1.0,1.0])
1 |Array("a", "b","b", "c","a") |(3,[0,1,2],[2.0,2.0,1.0])
每个向量代表文档的词汇表中每个词语出现的次数
【文本词频Countvectorizer】
1.3 Demo

mport org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}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) //要求必须至少出现的次数,这里设定词汇表的最大量为3,设定词汇表中的词至少要在2个文档中出现过,以过滤那些偶然出现的词汇。// alternatively, define CountVectorizerModel with a-priori vocabulary val cvm = new CountVectorizerModel(Array("a", "b", "c")) .setInputCol("words") .setOutputCol("features")cvModel.transform(df).select("features").show()



    推荐阅读