将不得不使用术语/单词作为列名而不是使用sparklyr来构建Tf-idf矩阵/数据帧。我选择ft_count_vectorizer是因为它可以存储词汇。但是在找到tf-idf之后我陷入了困境,我无法将术语映射到其tf-idf值。对此领域的任何帮助将不胜感激。这是我尝试过的事情。
tf_idf<-cleantext %>%
ft_tokenizer("Summary", "tokenized") %>%
ft_stop_words_remover(input.col = "tokenized", output.col = "clean_words",
ml_default_stop_words(sc,language = ("english"))) %>%
ft_count_vectorizer(input_col = "clean_words",output_col="tffeatures")%>%
ft_idf(input_col="tffeatures",output_col="tfidffeatures")
tf-idf是spark_tbl类,其中还包括clean_words(vocabulary)和tfidf功能,这两个功能均以列表形式出现。我需要提供tfidf功能作为输入,clean_words作为列标题。最好的方法是什么。我被困在这里。任何帮助或帮助将不胜感激。
答案 0 :(得分:0)
尽管像这样在技术上可能的操作没有很多实际应用。 Apache Spark并未针对处理包含大量数据的执行计划进行优化,例如可能通过扩展向量化列而生成的计划。
如果您仍要继续学习,则必须提取CountVectorizer
保留的词汇。一种可能的方法是使用ML管道(您可以查看我对how to train a ML model in sparklyr and predict new values on another dataframe?的回答以获取详细说明)。
使用变压器,您可以定义Pipeline
的{{1}}和fit
:
PipelineModel
然后检索model <- ml_pipeline(
ft_tokenizer(sc, "Summary", "tokenized"),
ft_stop_words_remover(sc, input.col = "tokenized",
output.col = "clean_words",
ml_default_stop_words(sc, language = "english")),
ft_count_vectorizer(sc, input_col = "clean_words",
output_col = "tff eatures"),
ft_idf(sc, input_col = "tffeatures",output_col = "tfidffeatures")
) %>% ml_fit(cleantext)
并提取词汇表:
CountVectorizerModel
最后vocabulary <- ml_stage(model, "count_vectorizer")$vocabulary %>% unlist()
数据,应用transform
,然后选择感兴趣的列:
sdf_separate_column