• 词频统计


    一、程序分析

      (1)读文件到缓冲区

    def process_file(dst):     # 读文件到缓冲区
        try:     # 打开文件
            file=open(dst,"r")
        except IOError as s:
            print(s)
            return None
        try:     # 读文件到缓冲区
            bvffer=file.read()
        except:
            print("Read File Error!")
            return None
        file.close()
        return bvffer
    

    (2)处理缓冲区

    def process_buffer(bvffer):
        if bvffer:
            word_freq = {}
            # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
            for i in '!"#$%&()*+-,-./:;<=>?@“”[\]^_{|}~':
                bvffer = bvffer.replace(i, " ")  # 替换特殊字符
            bvffer = bvffer.lower()  #把大写字母转换为小写
            words = bvffer.split()  # 分割字符串
            for word in words:
                word_freq[word] = word_freq.get(word, 0)+1
            return word_freq

    (3)输出词频排序前十的词

    def output_result(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(item)

    (4)封装main函数

    def main():
    
        parser = argparse.ArgumentParser()
        parser.add_argument('dst')
        args = parser.parse_args()
        dst = args.dst
        bvffer = process_file(dst)
        word_freq = process_buffer(bvffer)
        output_result(word_freq)

    (5)cProfile性能评估

    if __name__ == "__main__":
        import cProfile
        import pstats
        import argparse
        cProfile.run("main()", "result")
        # 直接把分析结果打印到控制台
        p = pstats.Stats("result")  # 创建Stats对象
        p.sort_stats('calls').print_stats(10)
        # 按照调用次数排序,打印前10函数的信息
        p.strip_dirs().sort_stats("cumulative", "name").print_stats(10)
        p.print_callers(0.5, "process_file")  # 得知哪些函数调用了process_file
        p.print_callers(0.5, "process_buffer")  
        p.print_callers(0.5, "output_result")

    二、代码风格

      tab和空格不能同时使用,否则会报错

    def process_buffer(bvffer):
        if bvffer:

    三、程序运行截图

     四、性能分析结果及改进

    (1)执行次数最多

    (2)执行时间最长

    (3)改进

      由于文本中有些符号是不可能出现的,在替换特殊字符时可以将一些字符省略。

    改进后的代码为

    for i in '!"()+-,-./:;<=>?“”^~':
                bvffer = bvffer.replace(i, " ")  # 替换特殊字符
  • 相关阅读:
    Golang-单元测试
    Golang-Json序列化和反序列化
    Golang-文件操作
    Golang-demo
    Golang-demo练习
    Golang-类型断言
    Golang-面向对象编程三大特性-多态
    Golang-接口(interface)
    Golang-面向对象编程三大特性-继承、多重继承
    块状元素和内联元素 【转】
  • 原文地址:https://www.cnblogs.com/psglgdzmr/p/9764151.html
Copyright © 2020-2023  润新知