Scala将[Seq [string]转换为[String]? (词形还原后的TF-IDF)

时间:2017-07-16 13:28:40

标签: scala tf-idf lemmatization lsa

我尝试学习scala和specificaly文本minning(词形还原,TF-IDF矩阵和LSA)。

我有一些我想要引理并进行分类的文本(LSA)。我在cloudera上使用spark。

所以我使用了stanfordCore NLP功能:

    def plainTextToLemmas(text: String, stopWords: Set[String]): Seq[String] = {
    val props = new Properties()
    props.put("annotators", "tokenize, ssplit, pos, lemma")
    val pipeline = new StanfordCoreNLP(props)
    val doc = new Annotation(text)
    pipeline.annotate(doc)
    val lemmas = new ArrayBuffer[String]()
    val sentences = doc.get(classOf[SentencesAnnotation])
    for (sentence <- sentences; token <-sentence.get(classOf[TokensAnnotation])) {
    val lemma = token.get(classOf[LemmaAnnotation])
    if (lemma.length > 2 && !stopWords.contains(lemma)) {
    lemmas += lemma.toLowerCase
    }
    }
    lemmas
    }

之后,我尝试制作TF-IDF矩阵,但这是我的问题: 斯坦福大学以[Seq [string]形式制作RDD。 但是,我有一个错误。 我需要以[String]形式使用RDD(而不是[Seq [string]]形式。)

val (termDocMatrix, termIds, docIds, idfs) = termDocumentMatrix(lemmatized-text, stopWords, numTerms, sc)

有人知道如何将[Seq [string]]转换为[String]?

或者我需要更改我的一个请求?

感谢您的帮助。 对不起,如果这是一个愚蠢的问题和英语。

再见

1 个答案:

答案 0 :(得分:0)

我不确定这个词形推理是什么,但是就一个序列中的字符串而言,你可以seq.mkString("\n")(或者用其他任何分隔符替换&#34; \ n&#34;你想要的,或只是seq.mkString如果你想要它没有任何分隔符合并。

另外,不要使用可变结构,它在scala中的味道不好:

val lemmas = sentences
  .map(_.get(classOf[TokensAnnotation]))
  .map(_.get(classOf[LemmaAnnotation]))
  .filter(_.length > 2)
  .filterNot(stopWords)
  .mkString