【发布时间】:2020-01-25 06:36:14
【问题描述】:
我已经针对关键字 RDD 进行了标准化的 TF-IDF,现在想要计算余弦相似度以找到文档的相关性分数。
所以我尝试了
documentRdd = sc.textFile("documents.txt").flatMap(lambda l: re.split(r'[^\w]+',l))
keyWords = sc.textFile("keywords.txt").flatMap(lambda l: re.split(r'[^\w]+',l))
normalizer1 = Normalizer()
hashingTF = HashingTF()
tf = hashingTF.transform(documentRdd)
tf.cache()
idf = IDF().fit(tf)
tfidf = idf.transform(tf)
normalizedtfidf=normalizer1.transform(tfidf)
现在我想计算归一化tfidf和keyWords之间的余弦相似度。所以我尝试使用
x = Vectors.dense(normalizedtfidf)
y = Vectors.dense(keywordTF)
print(1 - x.dot(y)/(x.norm(2)*y.norm(2)) , "is the releavance score")
但这会引发错误
TypeError: float() 参数必须是字符串或数字
这意味着我传递了错误的格式。感谢任何帮助。
更新
我试过了
x = Vectors.sparse(normalizedtfidf.count(),normalizedtfidf.collect())
y = Vectors.sparse(keywordTF.count(),keywordTF.collect())
但是得到了
TypeError:不能将类型视为 向量
作为错误。
【问题讨论】:
标签: pyspark apache-spark-mllib tf-idf