【发布时间】:2015-11-02 18:34:22
【问题描述】:
我有 150 个文本文档(训练集),我想使用 pyspark 和 mllib 包“功能”对其执行“词袋”表示。从这里开始,我还有另外 150 个文本文档(测试集),我还想将它们转换为一个词袋,目的是将这个测试集的每个元素映射到具有最高余弦相似度的训练集文档。为了做到这一点,我将为权重实施 TF-IDF:这需要每个文档的词频以及我想要匹配的组合训练集。
我正在使用本指南:
https://spark.apache.org/docs/1.3.0/mllib-feature-extraction.html
请注意,它有一个注释“#加载文档(每行一个)”。然而,为了简洁起见,我从同一目录循环上传每个文本文件,如下所示:
import os
from pyspark import SparkContext
from pyspark.mllib.feature import HashingTF
from pyspark.mllib.feature import IDF
train = os.listdir("/home/ubuntu/TF-IDF/TrainingSet") #create a list of file names
hashingTF = HashingTF()
for i in range(0,len(train)): #create RDD of each text file, split into words and (attempt) to make hash table
documents = sc.textFile("/home/ubuntu/TF-IDF/TrainingSet/" + train[i]).map(lambda line: line.split(" "))
tf = hashingTF.transform(documents)
tf.count() #enact count to check if tf has worked as expected
但我发现用 tf.count() 作为检查,它给出的答案是 26,这肯定是错误的。尽管如此,从这里开始:
idf = IDF(minDocFreq=1).fit(tf)
tfidf = idf.transform(tf)
我的问题是如何使用这个 tfidf 和余弦相似度来匹配从测试集到训练集的文本文档?
【问题讨论】:
标签: python apache-spark pyspark apache-spark-mllib tf-idf