如何形成基于词汇的tfidf sparklyr数据框

时间:2018-07-08 06:14:31

标签: r apache-spark apache-spark-ml sparklyr countvectorizer

将不得不使用术语/单词作为列名而不是使用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作为列标题。最好的方法是什么。我被困在这里。任何帮助或帮助将不胜感激。

1 个答案:

答案 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