用 Scala 实现文本单词统计与结果输出

75 阅读1分钟

在日常的文本处理场景中,统计单词出现的频率是一个非常经典的需求。Scala 作为一门融合了面向对象和函数式编程的语言,凭借其简洁的语法和强大的集合操作能力,能让我们高效地完成这个任务。

一、需求分析

我们的核心需求是:

  1. 读取指定文本文件(text)中的内容;
  2. 将文本拆分为单词,并统一转换为小写(避免大小写导致的统计误差);
  3. 统计每个单词出现的次数;
  4. 按照出现次数从高到低排序;
  5. 将统计结果写入result文件中。

二、完整代码实现

首先,我们先看完整的实现代码

package words

import java.io.FileWriter

object words{
  def main(args: Array[String]): Unit = {
    val content = scala.io.Source.fromFile("text").mkString;
    // 1. 将字符串拆分为单词
    val list = content.split("\W+").map(word=>word.toLowerCase) // 使用空格 去拆分字符串,结果是一个List
    // list.foreach(ele => println(ele))

    // 3. 统计每个单词出现的次数
    // 键 -> 单词,值 -> 次数
    val map1 = scala.collection.mutable.Map[String, Int]()
    list.foreach(word => {
      // 检查它在map1中是否存在
      if (map1.contains(word)) {
        map1(word) += 1 // 存在,把它的值+1
      } else {
        map1(word) = 1 // 不存在,把它的值设为1
      }
    })
    //4.对结果排序
    val wordslist = map1.toList.sortBy(_._2).reverse
    //5.把结果输出到一个新的文件中
    val fileWriter = new FileWriter("result")
    wordslist.foreach(el => {
      fileWriter.write(s"${el._1} - ${el._2} \n")

    })
    fileWriter.close()
  }
}