Der*_*ski 6 python tf-idf apache-spark pyspark countvectorizer
我有一个包含约 30k 个独特文档的数据集,这些文档被标记,因为它们中有某个关键字。数据集中的一些关键字段是文档标题、文件大小、关键字和摘录(关键字周围 50 个字)。这些约 30k 个唯一文档中的每一个都有多个关键字,并且每个文档在数据集中每个关键字都有一行(因此,每个文档都有多行)。以下是原始数据集中关键字段的示例:
我的目标是建立一个模型来标记某些事件(孩子们抱怨家庭作业等)的文档,因此我需要对关键字和摘录字段进行矢量化,然后将它们压缩,这样每个唯一文档就有一行。
仅使用关键字作为我要执行的操作的示例 - 我应用了 Tokenizer、StopWordsRemover 和 CountVectorizer,然后它们将输出一个带有计数矢量化结果的稀疏矩阵。一个稀疏向量可能类似于: sparseVector(158, {7: 1.0, 65: 1.0, 78: 2.0, 110: 1.0, 155: 3.0})
我想做两件事之一:
为了让您了解我的意思 - 下图左侧是 CountVectorizer 输出的所需密集向量表示,左侧是我想要的最终数据集。
小智 3
我会尝试:
>>> from pyspark.ml.linalg import SparseVector, DenseVector
>>>
>>> df = sc.parallelize([
... (1, SparseVector(158, {7: 1.0, 65: 1.0, 78: 2.0, 110: 1.0, 155: 3.0})),
... (1, SparseVector(158, {99: 100.0})),
... (2, SparseVector(158, {1: 1.0})),
... ]).toDF(["docId", "features"])
>>> df.rdd.mapValues(lambda v: v.toArray()) \
... .reduceByKey(lambda x, y: x + y) \
... .mapValues(lambda x: DenseVector(x)) \
... .toDF(["docId", "features"])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3448 次 |
| 最近记录: |