韩昊20190912-3 词频统计
作者:互联网
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583
词频统计 SPEC 20180918
一、代码以及版本控制
代码地址:https://e.coding.net/hanhao/count_words.git
使用语言:python
使用git的客户端为: git push
二、重点/难点以及效果截图
功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。
重点/难点 :
(1)如何将py文件转化为exe文件
附上教程:https://www.cnblogs.com/hanhao970620/p/11537088.html
(2)英文字符的冗余校验和删除,解决办法是将字符等替换成空格
重要代码展示:
删除冗余字符:
def deal_Redundantwords(string): string = string.replace('\n', ' ').replace(',', ' ') s1 = list(string) num = len(s1) s1.append(' ') for i in range(num): if s1[i] in '."?\')-(;#$%&*!': #isalnum检测字符串是否有数组组成 if str(s1[i - 1].isalnum()) == 'True' and (str(s1[i + 1].isalnum()) == 'True'): pass else: s1[i] = ' ' for i in range(num): if s1[i] in ':': if s1[i + 1] == '/': pass else: s1[i] = ' ' #join连接字符数组 s = ''.join(s1) # print(s) return s
实现功能一:
list1 = text.replace('\n', ' ').lower().split() # 保存原始数据 list2 = list(set(list1)) # 去重之后的数据 if (flag == 0): print("total " + str(len(list2))) # 小文本统计词汇量(功能1不输出words) else: print("total " + str(len(list2)) + " words") # 统计词汇量 print("\n") 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) # 按照频数排序
执行效果截图:
得意、突破、困难的地方 ;
函数的了解程度:对isalnum(),jion()函数没有认知,导致在检测字符串和连接字符串过程中进行的十分困难。
冗余函数的定义:在项目中,我将去除冗余字符单独定义成一个函数,可以项目中四个功能反复调用,大大简化了程序。
功能2 支持命令行输入英文作品的文件名,请老五亲自录入。
重点/难点 :读文件,使用open函数(open(filename,mode,buffering,encoding)方法),将单词存入字典根据空格数计算词频
重要代码展示:
try: with open(filename, 'r', encoding='UTF-8') as f_obj: content = f_obj.read() countNumber(content, flag) except FileNotFoundError: msg = "sorry,the file " + filename + " does not exist." print(msg)
执行效果截图:
得意、突破、困难的地方 :
大文件:对大文件的筛选难度要明显高于功能一的小文件,不过python中read,open函数起了很大作用。
功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
重点/难点 :
(1)由于没有接触过批量读取文件中所在文档,所以导致耗时巨大。
(2)提取文件夹中类型为.txt文件,输入文件名,并存入列表。
重要代码展示:
找文件:
path = os.listdir(os.getcwd()) # 获取当前目录下所有文件 folderList = [] for p in path: if os.path.isdir(p): # 找到所有文件夹
读文件:
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])
执行效果截图:
得意、突破、困难的地方 :
函数的调用:对os.path函数和splitext()的理解和调用解决的获取文件路径和分离文件后缀的问题,而这些函数在本项目前我并不了解。
功能4 :从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋
友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活
的接口)。
重点/难点 :
(1)对于重定向的理解和实践(这里对老师所提出的四大概念:命令行参数、重定向、标准输入、控制台进行了重新理解)
详细内容求参考:https://www.cnblogs.com/hanhao970620/p/11536985.html
(2)用户输入文件名或者文本内容 捕获问题。
重要代码展示:
elif sys.argv[1] == "-s": if (len(sys.argv) == 3): # print(sys.argv) flag = 0 countFileWords(sys.argv[2], flag) else: # print(sys.argv) #重定向获取文件名 redirect_words = sys.stdin.read() # 存储文件名调用方法即可 flag = 0 countNumber(redirect_words, flag)
执行效果截图:
得意、突破、困难的地方 :
对重定向的的实践,'<'在重定向中的意义是标准输入,而使用input()方法可以获取输入内容。
三、PSP表格
总结:
初见作业时,我在很长一段时间内是崩溃的,因为完全无从下手。出于想要了解和尝试python的目的,决定首次使用python完成项目,进行过程中基本一直是处于一个边学边做的状态。本次项目不仅让我在一定意义上认识到了自我,同时也是对自己的一个很大提高。在不停的焦躁和崩溃同时,我算是想python走出了一小步。该项目完成要感谢很多人,老师,室友,包括大学本科同学等等。在完成项目的过程中,我了解并应用了isalnum()replace()os.listdir()等等等一系列python函数用法,并了解了重定向,命令行参数等相关概念。
标签:文件,python,s1,韩昊,20190912,print,词频,os,dir 来源: https://www.cnblogs.com/hanhao970620/p/11537479.html