Проблема с комбинированной функцией Scala - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть такой файл ввода:

The Works of Shakespeare, by William Shakespeare 
Language: English

, и я хочу использовать flatMap с методом combinations для получения пар KV на строку.

Эточто я делаю:

var pairs = input.flatMap{line => 
  line.split("[\\s*$&#/\"'\\,.:;?!\\[\\(){}<>~\\-_]+")
    .filter(_.matches("[A-Za-z]+"))
    .combinations(2)
    .toSeq
    .map{ case array => array(0) -> array(1)}
}

Я получил 17 пар после этого, но пропустил 2 из них: (by,shakespeare) и (william,shakespeare).Я думаю, что может быть что-то не так с последним словом первого предложения, но я не знаю, как это решить, кто-нибудь может мне сказать?

1 Ответ

0 голосов
/ 19 сентября 2018

Метод combinations не даст дубликатов, даже если значения находятся в обратном порядке.Таким образом, пропущенные значения уже появляются в решении в другом порядке.

Этот код создаст все упорядоченные пары слов в тексте.

  for {
    line <- input
    t <- line.split("""\W+""").tails if t.length > 1
    a = t.head
    b <- t.tail
  } yield a -> b

Вот описаниеtails method:

Итерация по хвостам этой доступной коллекции.Первым значением будет эта перемещаемая коллекция, а последним будет пустая пройденная коллекция с промежуточными значениями - результаты последовательных применений tail.

...