【发布时间】:2019-03-15 21:16:59
【问题描述】:
我看过类似的帖子,但没有完整的答案,因此在这里发布。
我在 Spark 中使用 TF-IDF 来获取文档中具有最大 tf-idf 值的单词。我使用以下代码。
from pyspark.ml.feature import HashingTF, IDF, Tokenizer, CountVectorizer, StopWordsRemover
tokenizer = Tokenizer(inputCol="doc_cln", outputCol="tokens")
remover1 = StopWordsRemover(inputCol="tokens",
outputCol="stopWordsRemovedTokens")
stopwordList =["word1","word2","word3"]
remover2 = StopWordsRemover(inputCol="stopWordsRemovedTokens",
outputCol="filtered" ,stopWords=stopwordList)
hashingTF = HashingTF(inputCol="filtered", outputCol="rawFeatures", numFeatures=2000)
idf = IDF(inputCol="rawFeatures", outputCol="features", minDocFreq=5)
from pyspark.ml import Pipeline
pipeline = Pipeline(stages=[tokenizer, remover1, remover2, hashingTF, idf])
model = pipeline.fit(df)
results = model.transform(df)
results.cache()
我得到类似的结果
|[a8g4i9g5y, hwcdn] |(2000,[905,1104],[7.34977707433047,7.076179741760428])
在哪里
filtered: array (nullable = true)
features: vector (nullable = true)
如何获取从“特征”中提取的数组?理想情况下,我想得到对应于最高 tfidf 的单词,如下所示
|a8g4i9g5y|7.34977707433047
提前致谢!
【问题讨论】:
-
如果我错了,请纠正我:您不能假设单词
a8g4i9g5y与功能 905 相关联,因此其 tf-idf 值为 7.34977707433047。散列过程不一定保持这个特定句子中单词的顺序。您只能确定a8g4i9g5y或hwcdn由905 列表示,而另一个由1104表示。