Scala Преобразовать [Seq[string] в [String]? (TF-IDF после лемматизации)

Я пытаюсь изучить scala и, в частности, анализ текста (лемматизация, матрица TF-IDF и LSA).

У меня есть несколько текстов, которые я хочу лемматизировать и сделать классификацию (LSA). Я использую искру на cloudera.

Поэтому я использовал функцию 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, но вот моя проблема: Стэнфордская функция создает RDD в форме [Seq [string]]. Но у меня ошибка. Мне нужно использовать RDD в форме [String] (а не в форме [Seq[string]]).

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

Кто-нибудь знает, как преобразовать [Seq[string]] в [String]?

Или мне нужно изменить один из моих запросов?

Спасибо за помощь. Извините, если это глупый вопрос и для английского языка.

до свидания


person So ode    schedule 16.07.2017    source источник
comment
Извините, мне нужно уточнить мой вопрос. Функция лемматизации создала RDD в [Seq [Форма строки]], но мне просто нужна [Форма строки] для tf-idf. Знаете ли вы функцию лемматизации, создающую форму [String]?   -  person So ode    schedule 17.07.2017


Ответы (1)


Я не уверен, что это за лемматизация, но что касается создания строки из последовательности, вы можете просто сделать seq.mkString("\n") (или заменить "\n" любым другим разделителем, который вы хотите), или просто seq.mkString, если вы хотите, чтобы он был объединен без всяких разделителей.

Кроме того, не используйте изменяемые структуры, это плохой вкус в scala:

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