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

how to form a vocabulary based tfidf sparklyr dataframe

必须使用 sparklyr 构建一个 Tf-idf matrix/dataframe 并将 terms/words 作为列名而不是索引。我选择 ft_count_vectorizer 是因为它提供了存储词汇的功能。但是在找到 tf-idf 后我被卡住了,我无法将这些术语映射到它的 tf-idf values.Any 帮助中 space 将是高度 appreciated.Here 是我试过了。

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 class,其中还包括 clean_words(词汇)和 tfidf features.Both,这些功能以列表的形式出现。我需要提供 tfidf 功能作为输入,并使用 clean_words 作为列标题。最好的方法是什么。我被困在这里。任何协助或帮助将不胜感激。

虽然像这样的技术上可行的操作没有多少实际应用。 Apache Spark 未针对处理具有宽数据的执行计划进行优化,例如可能通过扩展向量化列生成的执行计划。

如果您仍然继续阅读,则必须提取 CountVectorizer 保留的词汇。一种可能的方法是使用 ML 管道(您可以查看我对 的回答以获得详细解释)。

  • 使用您拥有的转换器,您可以定义 Pipelinefit 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 和 select 感兴趣的列:

    ml_transform(model, cleantext) %>% 
      sdf_separate_column("tfidffeatures", vocabulary) %>% 
      select(one_of(vocabulary))