LINUX.ORG.RU

Вопрос по Scala вывести предложение текста, в котором больше всего слов

 ,


0

2

Всем привет! Задача такая, нужно вывести предложение текста, в котором больше всего слов. Есть только самое начало, по scala не нашел особо литературы, может кто может помочь

import io.Source 
object tryagain {
  def main(args: Array[String]) { 
text("US President-elect Donald Trump has defended his handling of the transition to the White House, amid reports of disarray in his team. A new sentence for text.") 
}
 def text(news: String) 
{ 
news.split(" ").groupBy(x=>x) 
val counts = news.split("\\W+").groupBy(x=>x).mapValues(x=>x.length) 
printsomething(counts) 
}


news.split("[.?!]").foldLeft((0, "")){ (stnc, acc) =>
  val wordsCount = stnc.split(" ").length
  if(wordsCount > acc._1) (wordsCount, stnc) else acc
}
anonymous
()

по scala не нашел особо литературы,

Признайся, даже не искал

[code]news.split(" ").groupBy(x=>x)[/code]

И зачем тут groupBy и зачем тебе тут сплит по словам если тебе предложения нужны?

[code]news.split(«\\W+»).groupBy(x=>x).mapValues(x=>x.length)[/code]

Тебе вроде количество слов нужно а не их длина?

anonymous
()
Ответ на: комментарий от anonymous

Пытаюсь вставить ваш код, показывает ошибки:
value split is not a member of (Int,String)
type mismatch; found : (Int, String) required: String line 12
type mismatch; found : String required: (Int, String) line 12

import io.Source 
object tryagain {
  def main(args: Array[String]) { 
text("US President-elect Donald Trump has defended his handling of the transition to the White House, amid reports of disarray in his team. A new sentence for text.") 
}

  def text(news: String) 
{ 
news.split("[.?!]").foldLeft((0, "")){ (stnc, acc) =>
  val wordsCount = stnc.split(" ").length
  if(wordsCount > acc._1) (wordsCount, stnc) else acc
}
} 


}
shonny
() автор топика
Ответ на: комментарий от shonny

я там порядок попутал, stnc, acc в фолде местами поменяй. и после фолда допиши что-то вроде ._2 так функция тест вернет самое длинное предложение, надеюсь что вывод сможешь сам дописать

ЗЫ зачем тебе Scala? и если уж ее выбрал то ознакомся хотябы с этим

anonymous
()
Ответ на: комментарий от migesok

Тестовое задание делаешь, да?

больше на первую практику похоже, но как можно делать практику не зная вообще ничего и не хотя думать - хз

anonymous
()
Ответ на: комментарий от migesok

Нет, не тестовое задание, по учебе нужно

shonny
() автор топика

Есть только самое начало, по scala не нашел особо литературы

The Are of Counting Words in Scala.

anonymous
()
Ответ на: комментарий от anonymous

Что-то я не пойму куда ._2 вставлять, не могли бы подсказать? И через println можно же вывести результат?

shonny
() автор топика
Ответ на: комментарий от shonny

Что-то я не пойму куда ._2 вставлять, не могли бы подсказать? И через println можно же вывести результат?

object tryagain {
  def main(args: Array[String]):Unit = { 
    val longest = text("US President-elect Donald Trump has defended his handling of the transition to the White House, amid reports of disarray in his team. A new sentence for text.")
    println(longest)
  }

  def text(news: String): String = {
    news.split("[.?!]").foldLeft((0, "")){ (acc, stnc) =>
      val wordsCount = stnc.split(" ").length
      if(wordsCount > acc._1) (wordsCount, stnc) else acc
    }._2
  }
}

что-то типа такого. Но в целом, начни хотя бы делать вид что пытаешься разобраться самостоятельно в коде, все лабы тут за тебя никто делать не будет

anonymous
()
Ответ на: комментарий от anonymous

Вы просто выручили меня, огромное вам спасибо!)

shonny
() автор топика
Ответ на: комментарий от stevejobs

все ли предложения заканчиваются на [.?!] ? xD

я думаю для его случая и этого хватит, а если нет - пусть хоть немного сам допишет

anonymous
()
Ответ на: комментарий от cdshines

Автору темы:

xs.split(регулярка_для_конца_предложений).maxBy(s => s.split(регулярка_для разделителя_слов).size)

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 1)
Ответ на: комментарий от cdshines

Для таких, как ты, есть maxBy

В целом согласен, но в данном случае не принципиально. Да и что-то мне подсказывает что maxBy через тот же foldLeft реализовано (и еще момент: если результат сплита будет пустым то полетит UnsupportedOperationException, что радости может не добавить)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.