Я выбрал нормализованный TF-IDF, а также ключевое слово RDD и теперь хочу вычислить косинусное сходство, чтобы найти показатель релевантности для документа.
Поэтому я попытался использовать
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)
Теперь я хотел вычислить косинусное сходство между normalizedtfidf и keyWords.So, я попытался использовать
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 ()должен быть строкой или числом
Это означает, что я передаю неверный формат. Любая помощь приветствуется.
Обновление
Iзатем попытался
x = Vectors.sparse(normalizedtfidf.count(),normalizedtfidf.collect())
y = Vectors.sparse(keywordTF.count(),keywordTF.collect())
, но получил
TypeError: Невозможно обработать тип как вектор
как ошибку.