结对项目之词频统计——增强功能

2023-11-21 02:10

本文主要是介绍结对项目之词频统计——增强功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基本信息

1.1作者及其他

#编译环境:pycharm2017 python3.6
#项目:结对项目之词频统计——增强功能
#作者:1613072034 陈原
#     1613072035 周怡峰
#编程日期:2018年11月29日

1.2本次作业地址

https://edu.cnblogs.com/campus/ntu/Embedded_Application/homework/2088

二、项目分析

1.步骤:

(1)按照作业要求将函数封装成类,以便让使用不同环境的用户(例如,命令行、Windows图形界面程序,网页程序,手机App)进行方便的调用。

import reclass WordCount():def __init__(self, dst, m, n, o):  # dst:文件路径;m:每个词组长度;n:输出的单词数量;o:设定生成文件的存储路径self.dst = dstself.m = mself.n = nself.o = odef process_file(self):  # 读取文件d = open(self.dst, "r")bvffer = d.read()return bvfferdef process_rowCount(self, bvffer):  # 计算文章的行数if bvffer:count = 1for word in bvffer:  # 开始计数if word == '\n':count = count + 1return countdef process_wordNumber(self, bvffer):if bvffer:bvffer = bvffer.lower()  # 将文本中的大写字母转换为小写for ch in '{}!"#%()*+-,-.\/:;<=>?&@“”[]^_|':bvffer = bvffer.replace(ch, " ")  # 将文本中非法字符转化为空格words = bvffer.split()  # 用空格分割字符串if words:wordNew = []words_select = '[a-z]{4}(\w)*'for i in range(len(words)):word = re.match(words_select, words[i])  # 如果不匹配,返回NULL类型if word:wordNew.append(word.group())word_freq = {}for word in wordNew:  # 将正则匹配的结果进行统计word_freq[word] = word_freq.get(word, 0) + 1return wordNew, word_freqdef process_MPhrase(self, bvffer):  # 查找m个单词组成的词组if bvffer:model = ''for i in range(self.m):model += '[a-z]+'if i < self.m - 1:model += '\s'result = re.findall(model, bvffer)  # 正则查找词组word_freq = {}for word in result:  # 将正则匹配的结果进行统计word_freq[word] = word_freq.get(word, 0) + 1return word_freqdef output_result(self, word_freq):if word_freq:sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)for item in sorted_word_freq[:self.n]:  # 输出前n个频率最高的单词print('<' + str(item[0]) + '>:' + str(item[1]))return sorted_word_freq[:self.n]def print_result(self):print('查询路径为:' + str(self.dst) + '的文本')print('统计词组长度为:' + str(self.m) + '且词频前' + str(self.n) + '的单词')bvffer = WordCount.process_file(self)  # 文件读入缓冲区lines = WordCount.process_rowCount(self, bvffer)  # 计算文章的行数wordNew, word_freq = WordCount.process_wordNumber(self, bvffer)  # 筛选出符合单词标准的单词词组sum_words = len(wordNew)  # 计算出符合单词标准的单词数量phrase_freq = WordCount.process_MPhrase(self, bvffer)show_sum_words = 'words:' + str(sum_words)show_lines = 'lines:' + str(lines)print(show_sum_words)  # 显示文章单词总数print(show_lines)  # 显示文章的行数itemsWord = WordCount.output_result(self, word_freq)itemsPhrase = WordCount.output_result(self, phrase_freq)with open(self.o, 'w+') as w:w.write(show_lines + '\n')w.write(show_sum_words + '\n')# 单词的可视化输出for itemWord in itemsWord:item = '<' + str(itemWord[0]) + '>:' + str(itemWord[1]) + '\n'w.write(item)# 词组的可视化输出for itemPhrase in itemsPhrase:item = '<' + str(itemPhrase[0]) + '>:' + str(itemPhrase[1]) + '\n'w.write(item)print('写入' + self.o + '文件已完成!')w.close()

(2)我们现在pycharm里试验一下能否成功统计词频(文本文件使用的是同一路径下的“Gone_with_the_wind.txt”,在主函数中预设统计3个单词组成的词组和输出出现频率最高的4个单词,并将结果保存成re.txt)

if __name__ == '__main__':obj = WordCount('src/Gone_with_the_wind.txt', 3, 4, 'src/re.txt')obj.print_result()

我们可以看见按照要求输出

(3)想要实现按照用户的要求对用户指定文本进行分析,就需要学习parserm模块中的add_agrumen函数,将你想输入的文本,要求规定到parser中,然后类似参数传递一样传递到class类中的各个函数得以实现。

def main():parser = argparse.ArgumentParser(description="your script description")  # description参数可以用于插入描述脚本用途的信息,可以为空parser.add_argument('--i', '-i', type=str, default='src/Gone_with_the_wind.txt', help="读取文件路径")parser.add_argument('--m', '-m', type=int, default=3, help="输出的单个词组数量")parser.add_argument('--n', '-n', type=int, default=4, help="输出的频率前n个的单词和词组数量")parser.add_argument('--o', '-o', type=str, default='src/result.txt', help="读取文件路径")args = parser.parse_args()  # 将变量以键-值的字典形式存入args字典dst = args.im = args.mn = args.no = args.oobj =WordCount.WordCount(dst, m, n, o)obj.print_result()

 

(4)在Dos命令提示符中传递参数

  1.指定文本分析 -i 参数设定读入的文件路径(先前在声明中有默认值,所以不指定其他要求程序会按默认值执行)

   

 2.指定统计词组长度为4  -m 参数设定统计的词组长度

3.指定统计出现频率最高的2个单词   -n 参数设定输出的单词数量

 

4. -o 参数设定生成文件的存储路径

5.总结性的一次性传递所有参数 多参数的混合使用(input.txt是自己弄的一个文本文档)

 

三、性能分析

四、PSP 表格

 五、事后分析与总结 

(1)针对某个问题的讨论决策过程:我们对API接口着重分析,我们两个也分成了两个方向进行研究,陈原主要针对类分装做一个接口在命令行进行输入参数;周怡峰主要是想在web窗口上做一个接口进行输入参数。最终我们讨论的结果是还是在命令行上进行输入参数做一个接口。

(2)评价对方:请评价一下你的合作伙伴,又哪些具体的优点和需要改进的地方。 这个部分两人都要提供自己的看法。

            周怡峰:陈原非常循循善诱,我不会的地方很耐心的指导,善于思考并且能付诸行动,希望对git指令了解更多。

            陈原:周怡峰非常认真,非常负责任,python的基础也是相当不错的,对于新接触的知识,立刻会付出行动进行验证,对我们的结对编程做出了巨大的贡献。

(3)评价整个过程:关于结对过程的建议

           结对编程不仅考研了编程能力,也考验了合作能力,我们在编程过程中相互鼓励,分工合作,因为一旦某个功能实现不了,一个人的话很容易暴躁,自闭。两个人可以相互鼓励,也同时形成一种良性竞争,比如这个方法是其中一个人想出来的,另一个人就会去思考有没有更快的方法。希望有机会可以再次结对编程,

(4)结对编程照片

 

转载于:https://www.cnblogs.com/MonC/p/10043424.html

这篇关于结对项目之词频统计——增强功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/399109

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

使用EasyPoi快速导出Word文档功能的实现步骤

《使用EasyPoi快速导出Word文档功能的实现步骤》EasyPoi是一个基于ApachePOI的开源Java工具库,旨在简化Excel和Word文档的操作,本文将详细介绍如何使用EasyPoi快速... 目录一、准备工作1、引入依赖二、准备好一个word模版文件三、编写导出方法的工具类四、在Export

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

C#实现高性能拍照与水印添加功能完整方案

《C#实现高性能拍照与水印添加功能完整方案》在工业检测、质量追溯等应用场景中,经常需要对产品进行拍照并添加相关信息水印,本文将详细介绍如何使用C#实现一个高性能的拍照和水印添加功能,包含完整的代码实现... 目录1. 概述2. 功能架构设计3. 核心代码实现python3.1 主拍照方法3.2 安全HBIT

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

录音功能在哪里? 电脑手机等设备打开录音功能的技巧

《录音功能在哪里?电脑手机等设备打开录音功能的技巧》很多时候我们需要使用录音功能,电脑和手机这些常用设备怎么使用录音功能呢?下面我们就来看看详细的教程... 我们在会议讨论、采访记录、课堂学习、灵感创作、法律取证、重要对话时,都可能有录音需求,便于留存关键信息。下面分享一下如何在电脑端和手机端上找到录音功能