20200917-2 词频统计
作业要求参见:https://edu.cnblogs.com/campus/nenu/2020Fall/homework/11206
代码地址:https://zhangwenyan1.coding.net/public/wordcount/lib1/git
词频统计 SPEC
功能1:小文件输入
重点/难点:
- 执行>wf -s test.txt命令时,需要将python编写的程序wf.py转成wf.exe应用程序。(安装 pyinstaller:命令行输入pip install pyinstaller,进入wf.py所在文件夹,命令行输入pyinstaller -F wf.py。)
- 相同单词不重复计数,在统计单词出现频率前需要除冗余字符。
- type 命令用来查看指定目录下文件的内容, 如果一个文件内容比较少, 则用 type 来查看非常方便。
注意:输出形式
重要代码(除冗余字符):
for i in range(n): if s1[i] in '".?\')(-;#$%&*!': if str(s1[i - 1].isalnum()) == 'True' and (str(s1[i + 1].isalnum()) == 'True'): pass else: s1[i] = ' ' for i in range(n): if s1[i] in ':': if s1[i + 1] == '/': pass else: s1[i] = ' '
重要代码(统计单词出现频率并按频数排序输出):
dir_a = {} for str1 in list1: if str1 != ' ': if str1 in dir_a.keys(): dir_a[str1] = dir_a[str1] + 1 else: dir_a[str1] = 1 dir_b = sorted((dir_a).items(), key=lambda x: x[1], reverse=True)
执行效果图:
功能2:支持命令行输入英文作品的文件名
重点/难点:
- 打开文件,读取文件内容
- 统计单词
- try:...except的用法
重要代码:
try: with open(filename, 'r', encoding='UTF-8') as f_obj: content = f_obj.read() countWord(content, flag) except FileNotFoundError: note = "sorry,the file " + filename + " does not exist." print(note)
执行效果图:
功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
重点/难点:
- 通过文件所在的文件夹名批量统计词频
- 找文件
- 读文件
注意:只列出出现次数最多的10个单词。
重要代码:
将文件夹下所有文件建成列表,输出文件名并统计每个文件词频信息。
for folder in folderList: if textFolder == folder: path1 = os.listdir(folder) for i in path1: if os.path.splitext(i)[1] == '.txt': fileNameList.append(os.path.splitext(i)[0]) for filenames in fileNameList: fileName = filenames + ".txt" path = pathCurrent + fileName print(filenames) countFileWords(path, flag) print("----")
执行效果图:
功能4 从控制台读入英文单篇作品,表明你能提供更适合嵌入脚本中的作品。如果读不懂需求,请教师兄师姐,或者 bing: linux 重定向。
重点/难点:
- 重定向的理解、应用
- 命令行参数
- 标准输入、标准输出
重要代码:
elif sys.argv[1] == "-s": if (len(sys.argv) == 3): # print(sys.argv) flag = 0 countFileWords(sys.argv[2], flag) else: redirect_words = sys.stdin.read() flag = 0 countWord(redirect_words, flag)
执行效果图:
总结分析:将标准输入重定向为文件the_show_of_the_ring.txt,统计词频并输出(不重复),还没有完全满足题目输入形式,有待改进。
功能实现过程中困难地方:
- python基本语法不够熟练,通过查资料虽得以解决,但比较费时间,之后需要尽快熟悉python语言,多实践练习。
- 满足输入输出形式
PSP:
代码及版本控制:
涉及主要步骤:
- Git安装及配置
- TortoiseGit安装
- 创建coding.net账号
- 设置公钥,本地仓库与coding.net上远程仓库之间传输一般采用SSH方式,方便进行版本控制。
- 配置账户(用户名及邮箱)
- 在coding.net上创建项目及代码仓库。
- 创建本地仓库,加入测试文件
- 连接本地仓库和远程仓库
- 在本地仓库中加入相关文件(add、commit)
- 推送文件到远程仓库
注意:完成配置和相关操作后要进行相应测试,确保正确。
总结:这部分是我提升比较大的地方,从最开始的不了解,到慢慢有了更深的理解,出现很多问题(因为操作顺序、命令不正确),然后一步一步检查错误解决问题(查资料+测试),最后成功将本地仓库和coding.net上远程仓库建立连接,并可进行pull和push,完成任务要求。