- 1、本文档共38页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
案例20基于词表词频统计
案例二十 基于词表的词频统计 本案例知识要点 链表的使用 文件操作 哈希表的使用 快速排序法 类的设计和使用 一、案例需求 案例描述 词频统计就是统计一个句子或一篇文章中各种词出现的频率,它是中文信息处理的一项基本技术,在很多领域中都有重要的应用。例如在中文搜索引擎(如Google、百度)中,除特别常用的词以外,一篇文章中出现频率较高的词通常能反映这篇文章的主题,因此可以使用词频来对中文文章进行归类。本案例实现按词表对文章中的词语进行分析,并按字典序给出词表中各词语在文章中出现的次数。 案例效果图 本案例需要一个待统计文本文件,如图所示。 待统计文本文件 本案例需一个词表文件,如图所示。 本案例最终统计出每个词在文本中出现的次数。运行效果如图所示。 本案例最终统计出的结果保存在文件out.txt中。效果如图所示。 功能说明 (1)本案例需要一个文本和一个词表,统计出每个词在文本中出现的次数。统计的原则包括以下两种: 交集型。例如“内存在涨价”,需要统计“内存”和“存在”两个词各一次(假设这两个词都在词表中)。 组合型。例如“中美关系在发展”,需要统计“中美”、“关系”和“中美关系”(假设这3个词都在词表中)。 文本和词表的格式如下: 文本是一个长句,句中只包含汉字,不包含数字、标点、空格、回车以及其他任何特殊符号。文本规模小于或等于50 000汉字。 词表的规模小于或等于100 000个词,所有词不重复,词在2~7个汉字之间,每个词占一行。 实现基于词表的词频统计,从磁盘中读取词表和文本,将词频统计结果输出到磁盘中,输出结果要求按字典序排序,并计算出程序运行时间。 二、案例分析 根据需要构造一个哈希表类,在类中实现如下操作: (1)建立哈希表,将词表在内存中存储起来,这个存储的过程就是类的构造函数。案例中的词表是数量较大的词组,词与词之间用空格隔开。因此可用文件流函数getline来实现。每次调用getline函数便得到一个存有词的字符串,然后将字符串按照某种散列函数插入到哈希表中,一直到词表全部存储为止。 (2)统计词频。从词表中读取文本文件,存储在一个字符串中,因为每个汉字存储在两字节中,所以词在4~14字节之间,用char word[15]即可表示一个词。考虑到词频统计的交集性和组合性原则,可将在文本字符串中的每个汉字与其后的汉字分别组成2~7个汉字的词,在词表中进行搜索,每被搜到一次,将统计次数加1。循环直到文本末尾。 (3)哈希函数(散列函数)的实现。用char word[15]存储的词得到一个关键字,然后除以某个素数,得到的余数为散列地址。由于数据较多,要高速完成搜索,散列到每个相同地址的元素要尽量少,因此素数要很大,关键字的范围也要很大而且不重叠。 (4)按字符的字典序排序输出。哈希表是乱序存储的,因此可先遍历哈希表,将所有词频大于0的词存入数组中,用快速排序法对这个数组中的元素进行排序。 三、案例设计 1.类的设计 根据案例分析,需要设计出两个结构体NODE和TABLE,同时还需要设计一个类SYMBOLTABLE。其中,结构体NODE是哈希桶(哈希桶即哈希表中各个同地址值的元素构成的链表)中节点的数据结构,TABLE是哈希表的结构,SYMBOLTABLE类提供了诸如哈希函数、查找词汇、遍历哈希表、将词汇插入哈希表中、快速排序等功能。 2.主程序设计 在主函数中声明了一个SYMBOLTABLE类的对象,依次调用哈希表类的构造函数、统计函数、输出函数即可。另外,为了记录程序的运行时间,包含了time头文件,调用clock函数,能精确到毫秒。主程序有详细的注释,清晰易懂,流程图略。 五、案例总结与提高 案例总结 本案例类的设计并不复杂,但是要求读者除了具备C++基本知识和简单的数据结构知识以外,还要求读者掌握文件流、哈希表、快速排序、算法设计、主函数接口等诸多知识点,否则案例理解起来比较困难。本案例用到的许多知识点在数据结构教材中都有很详细的讲述,读者可以查找相关书籍熟悉这些知识,对照程序来理解掌握这些知识,逐步提升程序设计水平。 案例提高 可以考虑采用更高效、冲突更少的哈希函数(HashFun(const string s))来完成本案例。 可以试着改用平衡树(AVL)作为数据结构。关于平衡树的相关知识可查阅数据结构教材。 第*页 共36页 目录 退出 目录 * 词表文件内容 运行效果 out.txt文件 第*页 共36页 目录 退出 目录
您可能关注的文档
- 林黛玉进贾府课后思考及练习.ppt
- 林晓洁3_2高中物理必修一弹力.ppt
- 林木蓄积量测定–网载.ppt
- 果仔总动员执行方案﹝修订版﹞.ppt
- 果品蔬菜贮藏运销学–1.ppt
- 林书豪﹝作文素材﹞.ppt
- 果品蔬菜贮藏运销学si第4章节果品蔬菜的采收和采后处理.ppt
- 构成物质的微观粒子﹝一﹞分子.ppt
- 构建Web应用系统–基于JSPServletJavaBean.ppt
- 林业经济学第1章节.ppt
- 基于人工智能教育平台的移动应用开发,探讨跨平台兼容性影响因素及优化策略教学研究课题报告.docx
- 高中生物实验:城市热岛效应对城市生态系统服务功能的影响机制教学研究课题报告.docx
- 信息技术行业信息安全法律法规研究及政策建议教学研究课题报告.docx
- 人工智能视角下区域教育评价改革:利益相关者互动与政策支持研究教学研究课题报告.docx
- 6 《垃圾填埋场渗滤液处理与土地资源化利用研究》教学研究课题报告.docx
- 小学音乐与美术教师跨学科协作模式构建:人工智能技术助力教学创新教学研究课题报告.docx
- 《航空航天3D打印技术对航空器装配工艺的创新与效率提升》教学研究课题报告.docx
- 教育扶贫精准化策略研究:人工智能技术在区域教育中的应用与创新教学研究课题报告.docx
- 《区块链技术在电子政务电子档案管理中的数据完整性保障与优化》教学研究课题报告.docx
- 《中医护理情志疗法对癌症患者心理状态和生活质量提升的长期追踪研究》教学研究课题报告.docx
文档评论(0)