当前位置: 首页 > ai >正文

Lua 第11部分 小插曲:出现频率最高的单词

       在本章中,我们要开发一个读取并输出一段文本中出现频率最高的单词的程序。像之前的小插曲一样,本章的程序也十分简单但是也使用了诸如迭代器和匿名函数这样的高级特性。

       该程序的主要数据结构是一个记录文本中出现的每一个单词及其出现次数之间关系的表。使用这个数据结构,该程序可以完成 3 个主要任务。

(1)读取文本并计算每一个单词的出现次数。
(2)按照出现次数的降序对单词列表进行排序。
(3)输出有序列表中的前 n 个元素。

        要读取文本,可以遍历每一行,然后遍历每一行的每一个单词。对于我们读取的每一个单词,增加对应计数器的值:

local  counter = {}for line in io.lines() dofor word in string.gmatch(line, "%w+") docounter[word] = (counter[word] or 0) + 1end
end

这里,我们使用模式"%w+"来描述“单词”, 也就是一个或多个字母或数字。

        下一步就是对单词列表进行排序。不过,就像一些有心的读者可能已经注意到的那样,我们并没有可以用来排序的单词列表。尽管如此,使用表 counter 中作为键的单词来创建一个列表还是很简单的:

local words = {}		-- 文本中所有单词的列表for w in pairs(counter) dowords[#words + 1] = w
end

一旦有了单词列表,就可以使用函数 table.sort 对其进行排序 :

table.sort( words, function (w1, w2)return counter[w1] > counter[w2] orcounter[w1] == counter[w2] and w1 < w2
end )

 统计单词出现频率的程序完整的代码如下:

local  counter = {}for line in io.lines() dofor word in string.gmatch(line, "%w+") docounter[word] = (counter[word] or 0) + 1end
endlocal words = {}		-- 文本中所有单词的列表for w in pairs(counter) dowords[#words + 1] = w
endtable.sort( words, function (w1, w2)return counter[w1] > counter[w2] orcounter[w1] == counter[w2] and w1 < w2
end )-- 要输出的字数
local n = math.min(tonumber(arg[1]) or math.huge, #words)for i = 1, n doio.write(words[i], "t", counter[words[i]], "\n")
end

        最后一个循环输出了结果,也就是前 n 个单词及它们对应的计数值。这个程序假定第 1个参数是要输出单词的个数;默认情况下,如果没有参数,它会输出所有的单词 。

http://www.xdnf.cn/news/2379.html

相关文章:

  • 驼峰命名法(Camel Case)与匈牙利命名法(Hungarian Notation)详解
  • Web开发-JavaEE应用依赖项Log4j日志Shiro验证FastJson数据XStream格式
  • 3、Linux操作系统下,linux的技术手册使用(man)
  • flask返回文件的同时返回其他参数
  • 微服务即时通信系统(十二)---入口网关子服务
  • 北京工业大学25计专上岸经验分享
  • Spark-Streaming核心编程的总结
  • 全新升级:BRAV-7601-T003高性能无风扇AI边缘计算系统,助力智能未来!
  • 教育培训平台源码选型避坑指南:如何避免二次开发的高成本?
  • STM32 驱动 INA226 测量电流电压功率
  • 【MCP】从一个天气查询服务带你了解MCP
  • C++ 基础内容入门
  • Centos 7.6安装redis-6.2.6
  • 如何将 Apache Paimon 接入 Ambari?完整部署与验证指南
  • 14【模块学习】74HC595:使用学习
  • 网络安全漏洞现状与风险管理分析
  • 在web应用后端接入内容审核——以腾讯云音频审核为例(Go语言示例)
  • 优考试V4.20机构版【附百度网盘链接】
  • Jenkins(CI/CD工具)
  • 【计算机网络】UDP网络编程、英汉字典以及多线程聊天室编写
  • UML 活动图详解之小轿车启动活动图分析
  • 【dockerredis】用docker容器运行单机redis
  • ASP.NET图片盗链防护指南
  • Java接口默认方法冲突
  • 2025.4.27_C_Struct,Enum,Union
  • 单片机学习笔记9.数码管
  • Redis使用总结
  • 相机DreamCamera2录像模式适配尺寸
  • 使用c++实现一个简易的量子计算,并向外提供服务
  • 一文说清Token这个大模型中的数字乐高积木的作用