Python实现word_count

Github链接: https://github.com/dududu7/wc_project

1. PSP2.1表格

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 10 20

· Estimate

· 估计这个任务需要多少时间

 10 15

Development

开发

 300 550

· Analysis

· 需求分析 (包括学习新技术)

 200 300

· Design Spec

· 生成设计文档

 10 20

· Design Review

· 设计复审 (和同事审核设计文档)

 0 0

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

 10 10

· Design

· 具体设计

 20 100

· Coding

· 具体编码

 300 200

· Code Review

· 代码复审

 10 10

· Test

· 测试(自我测试,修改代码,提交修改)

 60 180

Reporting

报告

 30 30

· Test Report

· 测试报告

 30 10

· Size Measurement

· 计算工作量

 10 10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

 10 30

合计

  1100 1485

项目相关要求

    • 基本功能
      -c file.c 返回文件file.c的字符数 (实现)
      -w file.c 返回文件file.c的词的数目(实现)
      -l file.c 返回文件file.c的行数(实现)
    • 扩展功能
      -s 递归处理目录下符合条件的文件(实现)
      -a 返回更复杂的数据(代码行 / 空行 / 注释行)(实现)
    • 高级功能
      -x 程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。(未实现)

      解题思路

    • 首先把大问题拆分成几个函数功能去实现:读取文件read();数基本功能的数目count_cl();数扩展功能的行数count_w();输出print1();递归文件duigui()这几大块;后来因为具体实现与一开始计划有出入,又增加了函数find(),而且基本功能和扩展的函数也有了变化。

       

      这个题目有几个地方我实现了很久,首先是基础功能的返回word,对于怎样区分出单词有些困惑。因为主体是区分.py的代码-a的时候,也是考虑‘’‘   ’‘’和#为主的注释行,递归的是子文件的内容,搞清楚目的操作并没有太复杂。 Py相比于C和JAVA更面向对象,而且最近对Python感兴趣想要挑战一下自己,所以选择了开发效率较高的python。由于以前从来没有开发过使用命令行参数启动的程序,最后还是用input的方法进行输入。

      设计实现过程和代码说明

  首先实现基础功能,读取文件:

#比起Re = open(dict1[numble])之后close文件要好,逐行读取

 

逐行读取的好处:-a 容易实现,readline后很容易计算空行,代码行

调用find函数,返回所有出现‘’’   ‘’’ 的行数,以便之后计算注释行数量

输出函数print1(),和read函数

 

 

 

为了实现递归读取,需要解决以下几个问题:

1.
为了处理读取path中\转义报错的问题,一开始采取前面加r的方式,但是路径不能input:

    查找解决方法时看到:转义只发生在代码字面量转换为python内部对象的过程中。已经是字符串了,则不会再次转义。

  所以只要在转义之后再改回来就好

 2.递归的时候只会加文件不会加'\',要记得加上‘\’符号

 3.路径错误->报错

 main函数:

 

转py为exe文件,可以先下一个pyInstall,百度过程就好

这样就算转换成功了。

 

 

测试:

·文件测试:

1.空文件

3.1个字符

这里回车也算作了1个字符

3.1个单词

 4.完整代码

单独打印word:

 

·递归测试:

 

项目总结:

  完成这个项目耗时挺久,现在能完全理解那句写功能只要20%的时间,接下来都在改bug了。虽然在暑假学习过Python,但是不够系统,导致我写代码的时候要不停的搜索,查找资料,之前的IDLE让我常常有缩进的错误,换成Pycharm才更顺手。有的时候卡bug卡半天不能解决,有的时候学习正则表达式等等用时良久,不过最终还是在星期五测试成功了。但是由于一直东拼西凑,还有很多可以改进的地方,比如输入可以更精简而不是多加一个-h解决输入全部的问题,比如读取文件read最好一次就行了,或者是功能写的更清晰一些。写代码的时候不自觉的带了好多目录,之前写C的时候习惯这样了,不知道算不算画蛇添足。这次累计的经验我会好好从中学习,争取下一次做的更好。

 

 

 

 

 

 

 
 
 


 

转载于:https://www.cnblogs.com/dududu7/p/9649425.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在下面这段代码的基础上进行修改import math from collections import defaultdict corpus =["二价 二价 二价 四价 预约", "四价 四价 四价 九价 预约", "九价 九价 九价 九价 预约"] words = [] for sentence in corpus: words.append(sentence.strip().split()) # 进行词频统计 def Counter(words): word_count = [] for sentence in words: word_dict = defaultdict(int) for word in sentence: word_dict[word] += 1 word_count.append(word_dict) return word_count word_count = Counter(words) # 计算TF(word代表被计算的单词,word_dict是被计算单词所在句子分词统计词频后的字典) def tf(word, word_dict): return word_dict[word] / sum(word_dict.values()) # 统计含有该单词的句子数 def count_sentence(word, word_count): return sum([1 for i in word_count if i.get(word)]) # i[word] >= 1 # 计算IDF def idf(word, word_count): return math.log((len(word_count) / (count_sentence(word, word_count) + 1)),10) # 计算TF-IDF def tfidf(word, word_dict, word_count): return tf(word, word_dict) * idf(word, word_count) p = 1 for word_dict in word_count: print("part:{}".format(p)) p += 1 for word, cnt in word_dict.items(): print("word: {} ---- TF-IDF:{}".format(word, tfidf(word, word_dict, word_count))) print("word: {} ---- TF:{}".format(word, tf(word, word_dict))) print("word: {} ---- IDF:{}".format(word, idf(word, word_count))) print("word: {} ---- count_sentence:{}".format(word, count_sentence(word, word_count))),将IDF进行改进,其中自定义热度权重文件weight.txt中我想存入的是每一个文档的热度权重,改进的idf值就是总文档热度权重总和除以包含某词所在的文档的热度权重之和然后再取对数,请写出改进后的python代码
最新发布
06-07

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值