20180912-3 词频统计

此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583

Git地址 https://e.coding.net/thiking/ci_ping_tong_ji.git

一、功能一

    1、功能要求

       小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。

     2、功能难点:

  (1).如何将文本中的空格和标点清除

   首先利用.replace( )将文本中的所有标点转化为空格,然后利用.split()将清除文档中的所有空格。

  (2)将文本中的所有大写单词转化为小写

          利用封装好的lower()把所有大写单词转化为小写

  (3)如何生成.exe文件,

      通过上网查看相应资料,首先安装pyinstaller,然后利用命令行 “pyinstaller  -F   项目名”     网上参考地址为:https://blog.csdn.net/sinat_39022932/article/details/89135501

       3、部分代码

def process_buffer(bvffer):
    total = 0
    if bvffer:
        word_freq = {}
        bvffer = bvffer.lower()                       # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
        for ch in '“‘!;,.?”':                         #清除文档中的标点
            bvffer = bvffer.lower().replace(ch, " ")  #将所有字母转换成小写,便于统计,
        words = bvffer.strip().split()                #strip消除空白符,split以空格作为单词分界
        total = total + len(words)
        print("total:"+str(total))
        for word in words:
            word_freq[word] = word_freq.get(word, 0)+1   #读取到的单词存放到字典
        Output(word_freq)
def Output(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[:10]:  # 输出 Top 10 的单词
            print('%-8s%5d' % (item[0], item[1]))

  4、运行截图

二、功能二

  1、功能要求

            支持命令行输入英文作品的文件名。

       2、功能难点    

   (1)如何判断输入是否携带后缀名.txt

    利用参数sys.argv[1],传入函数count中,首先判断sys.argv[1]中是否携带.txt的后缀名,如果有直接利用open()函数打开文档,否则给它添加一个.txt的后缀名,然后再执行                      取数据操作。      参考往届学长的代码:https://www.cnblogs.com/nenusoft/p/9696784.html

  3、部分代码

def Count(accept):
    s = '.txt'
    if s in accept:
        path = accept
    else:
        path = accept + '.txt'
    f = open(path, 'r')                #‘r’模式打开文件以后可以调用read函数一次性将文件里的内容全部读取出来
    bvffer = f.read()                  # 读文件到缓冲区
    f.close()
    process_buffer(bvffer)

  4、运行截图

三、功能三

  1、功能要求

    支持命令行输入存储有英文作品文件的目录名,批量统计。

       2、功能难点     

   (1) 判断是否输入的名字是否为目录名

     利用os.path.isdir()判断是否为目录名

   (2) 判断是否为文件

    利用os.path.isfile()判断是否为的文件,然后再执行词频查询

   3、部分代码

elif os.path.isdir(sys.argv[1]):    #判断路径是否为目录
         FindfileCount(sys.argv[1])     #功能三
def FileCount(path):    #文件数量查找
    print(path)              #输出文本名
    f = open(path, 'r')
    bvffer = f.read()
    f.close()
    process_buffer(bvffer)
    print('----')
def FindfileCount(path1):
    files = os.listdir(path1)    #用于返回指定的文件夹包含的文件或文件夹的名字的列表
    for file in files:
        if os.path.isfile(file): #检测路径是否是是文件
           FileCount(file)

   4、运行截图

四、功能四

  1、功能要求

    从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活的接口)。

  2、功能难点

  (1)不理解什么是重定向

    重定向是指将原来从标准输入读取数据的文件操作重新定向为从向其他文件读取数据;将原来要输出到标准输出的内容,从新定向输出到指定的其他文件中。

    参考网址:https://blog.csdn.net/weixin_40921797/article/details/82056426

  (2)如何利用python做重定向

    在Python中,文件对象sys.stdin、sys.stdout和sys.stderr分别对应解释器的标准输入、标准输出和标准出错流。针对这个功能的实现我只采用了sys.stdout(标准输出),只是                 从屏幕中读入,然后再进行词频查询。  

    参考网址:https://blog.csdn.net/xyh421/article/details/79513259

  (3)针对功能四仍然有难以解决的问题

               命令行的输入问题,如何实现从文件到文件的重定向。

  3、部分代码

def FindlocalText(inputText):
       filepath = "D://"
       filename = "out.txt"
       fullname = filepath + filename
       standard_output = sys.stdout       # 备份默认的标准输出(输出值控制台)
       sys.stdout = open(fullname, "w+")     #将标准输出重定向至文件
       process_buffer(inputText)          #读入文本中
       sys.stdout.close()                 # 关闭文件
       sys.stdout = standard_output       # 恢复默认标准输出

  4、运行截图

五、PSP表格

    

原文地址:https://www.cnblogs.com/dongyahui/p/11540733.html